141 subroutine a_cll(A,Auv,m02,rmax,Aerr,id_in)
143 integer,
intent(in) :: rmax
144 double complex,
intent(in) :: m02
145 double complex :: mm02
146 double complex,
intent(out) :: Auv(0:rmax/2), A(0:rmax/2)
147 double precision,
optional,
intent(out) :: Aerr(0:rmax)
148 integer,
optional,
intent(in) :: id_in
149 double complex :: A2uv(0:rmax/2), A2(0:rmax/2)
150 double complex :: Adduv(0:rmax/2), Add(0:rmax/2)
151 double precision :: Aerraux(0:rmax),Adiff(0:rmax)
152 double complex :: args(1)
153 integer :: n0, i, rank,errflag,id
154 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD),Aacc(0:rmax)
155 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
156 double precision :: norm,norm_coli,norm_dd
157 integer :: accflagDD,errflagDD,NDD,rankDD
158 logical :: mflag,eflag
162 call errout_cll(
'A_cll',
'Nmax_cll smaller 1',eflag,.true.)
164 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 1'
170 call errout_cll(
'A_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
173 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
179 if (
present(id_in))
then
188 call setmasterfname_cll(
'A_cll')
189 call setmastern_cll(1)
190 call setmasterr_cll(rmax)
191 call setmasterargs_cll(1,args)
203 call calca(a,auv,m02,rmax,aerraux)
204 if (abs(a(0)).ne.0d0)
then
205 aacc=aerraux/abs(a(0))
209 if (
present(aerr)) aerr=aerraux
223 call a_dd(add,adduv,mm02,rank,id)
230 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
231 if (
present(aerr))
then
232 aerr(0:rmax) = accabsdd(0:rmax)
234 if (abs(a(0)).ne.0d0)
then
235 aacc=accabsdd(0:rmax)/abs(a(0))
248 call calca(a,auv,m02,rmax,aerraux)
259 call a_dd(add,adduv,mm02,rank,id)
260 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
270 norm_coli = abs(a(0))
271 if(norm_coli.eq.0d0) norm_coli =
muuv2_cll
274 norm = min(norm_coli,norm_dd)
278 if (aerraux(rmax).lt.accabsdd(rmax))
then
279 if (
present(aerr)) aerr = max(aerraux,adiff)
280 aacc = max(aerraux/norm_coli,adiff/norm)
285 if (
present(aerr)) aerr = max(accabsdd(0:rmax),adiff)
286 aacc = max(accabsdd(0:rmax)/norm_dd,adiff/norm)
306 write(
ncpout_cll,*)
' Further output of Critical Points for A_cll suppressed '
326 subroutine b_main_cll(B,Buv,p10,m02,m12,rmax,Berr,id_in)
328 integer,
intent(in) :: rmax
329 double complex,
intent(in) :: p10,m02,m12
330 double precision :: q10
331 double complex :: mm02,mm12
332 double complex,
intent(out) :: Buv(0:rmax/2,0:rmax)
333 double complex,
intent(out) :: B(0:rmax/2,0:rmax)
334 double precision,
optional,
intent(out) :: Berr(0:rmax)
335 integer,
optional,
intent(in) :: id_in
336 double complex :: B2uv(0:rmax/2,0:rmax), B2(0:rmax/2,0:rmax)
337 double complex :: Bcoliuv(0:rmax,0:rmax)
338 double complex :: Bcoli(0:rmax,0:rmax)
339 double complex :: Bdduv(0:rmax,0:rmax)
340 double complex :: Bdd(0:rmax,0:rmax)
341 double precision :: Berraux(0:rmax),Bdiff(0:rmax)
342 double complex :: args(3)
343 integer :: n0,rank,errflag,id,r
344 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD)
345 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
346 double precision :: Bacc(0:rmax),Bacc2(0:rmax),norm,norm_coli,norm_dd
347 integer :: accflagDD,errflagDD,NDD,rankDD
348 logical :: mflag,eflag
352 call errout_cll(
'B_cll',
'Nmax_cll smaller 2',eflag,.true.)
354 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 2'
360 call errout_cll(
'B_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
363 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
369 if (
present(id_in))
then
381 call setmasterfname_cll(
'B_cll')
382 call setmastern_cll(2)
383 call setmasterr_cll(rmax)
384 call setmasterargs_cll(3,args)
396 call calcb(bcoli,bcoliuv,p10,m02,m12,rmax,id,berraux)
398 norm = maxval(abs(bcoli(0,0:rmax)))
399 if (norm.ne.0d0)
then
405 if (
present(berr))
then
411 b(0:rmax/2,0:rmax) = bcoli(0:rmax/2,0:rmax)
412 buv(0:rmax/2,0:rmax) = bcoliuv(0:rmax/2,0:rmax)
426 call b_dd(bdd,bdduv,q10,mm02,mm12,rank,id)
428 b(n0,0:rank) = bdd(n0,0:rank)
429 buv(n0,0:rank) = bdduv(n0,0:rank)
432 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
433 if (
present(berr))
then
434 berr(0:rmax) = accabsdd(0:rmax)
437 norm = maxval(abs(b(0,0:rmax)))
438 if (norm.ne.0d0)
then
439 bacc = accabsdd(0:rmax)/norm
441 bacc = accabsdd(0:rmax)
453 call calcb(bcoli,bcoliuv,p10,m02,m12,rmax,id,berraux)
455 b(0:rmax/2,0:rmax) = bcoli(0:rmax/2,0:rmax)
456 buv(0:rmax/2,0:rmax) = bcoliuv(0:rmax/2,0:rmax)
469 call b_dd(bdd,bdduv,q10,mm02,mm12,rank,0)
471 b2(n0,0:rmax) = bdd(n0,0:rmax)
472 b2uv(n0,0:rmax) = bdduv(n0,0:rmax)
474 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
476 norm_coli = maxval(abs(b(0,0:rmax)))
477 if (norm_coli.eq.0d0) norm_coli = 1d0
478 norm_dd = maxval(abs(b2(0,0:rmax)))
479 if (norm_dd.eq.0d0) norm_dd = 1d0
480 norm = min(norm_coli,norm_dd)
485 if (berraux(rmax).lt.accabsdd(rmax))
then
486 if (
present(berr)) berr = max(berraux,bdiff)
487 bacc = max(berraux/norm_coli,bdiff/norm)
492 if (
present(berr)) berr = max(accabsdd(0:rmax),bdiff)
493 bacc = max(accabsdd(0:rmax)/norm_dd,bdiff/norm)
513 write(
ncpout_cll,*)
' Further output of Critical Points for B_cll suppressed '
535 integer,
intent(in) :: rmax
536 double complex,
intent(in) :: MomInv(1), masses2(0:1)
537 double complex,
intent(out) :: Buv(0:rmax/2,0:rmax)
538 double complex,
intent(out) :: B(0:rmax/2,0:rmax)
539 double precision,
optional,
intent(out) :: Berr(0:rmax)
540 double precision :: Berraux(0:rmax)
542 if (
present(berr))
then
543 call b_main_cll(b,buv,mominv(1),masses2(0),masses2(1),rmax,berr)
545 call b_main_cll(b,buv,mominv(1),masses2(0),masses2(1),rmax,berraux)
559 subroutine b_list_cll(B,Buv,p10,m02,m12,rmax,Berr)
561 integer,
intent(in) :: rmax
562 double complex,
intent(in) :: p10,m02,m12
563 double complex,
intent(out) :: Buv(1:),B(1:)
564 double precision,
optional,
intent(out) :: Berr(0:rmax)
565 double precision :: Berraux(0:rmax)
570 call errout_cll(
'B_cll',
'Nmax_cll smaller 2',eflag,.true.)
572 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 2'
578 call errout_cll(
'B_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
581 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
593 integer,
intent(in) :: rmax
594 double complex,
intent(in) :: p10,m02,m12
595 double complex,
intent(out) :: Buv(1:NCoefs(rmax,2)),B(1:NCoefs(rmax,2))
596 double precision,
optional,
intent(out) :: Berr(0:rmax)
597 double complex :: Buv_aux(0:rmax/2,0:rmax), B_aux(0:rmax/2,0:rmax)
598 double precision :: Berraux(0:rmax)
599 integer :: r,n0,n1,cnt
601 if (
present(berr))
then
602 call b_main_cll(b_aux,buv_aux,p10,m02,m12,rmax,berr)
604 call b_main_cll(b_aux,buv_aux,p10,m02,m12,rmax,berraux)
613 b(cnt) = b_aux(n0,n1)
631 integer,
intent(in) :: rmax
632 double complex,
intent(in) :: MomInv(1),masses2(0:1)
633 double precision,
optional,
intent(out) :: Berr(0:rmax)
634 double complex,
intent(out) :: Buv(1:),B(1:)
639 call errout_cll(
'B_cll',
'Nmax_cll smaller 2',eflag,.true.)
641 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 2'
647 call errout_cll(
'B_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
650 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
662 integer,
intent(in) :: rmax
663 double complex,
intent(in) :: MomInv(1),masses2(0:1)
664 double complex,
intent(out) :: Buv(1:NCoefs(rmax,2)),B(1:NCoefs(rmax,2))
665 double precision,
optional,
intent(out) :: Berr(0:rmax)
666 double complex :: Buv_aux(0:rmax/2,0:rmax), B_aux(0:rmax/2,0:rmax)
667 double precision :: Berraux(0:rmax)
668 integer :: r,n0,n1,cnt
670 if (
present(berr))
then
671 call b_main_cll(b_aux,buv_aux,mominv(1),masses2(0),masses2(1),rmax,berr)
673 call b_main_cll(b_aux,buv_aux,mominv(1),masses2(0),masses2(1),rmax,berraux)
682 b(cnt) = b_aux(n0,n1)
698 subroutine c_main_cll(C,Cuv,p10,p21,p20,m02,m12,m22,rmax,Cerr,id_in,Cerr2)
700 integer,
intent(in) :: rmax
701 double complex,
intent(in) :: p10,p21,p20,m02,m12,m22
702 double precision :: q10,q21,q20
703 double complex :: mm02,mm12,mm22
704 double complex,
intent(out) :: Cuv(0:rmax/2,0:rmax,0:rmax)
705 double complex,
intent(out) :: C(0:rmax/2,0:rmax,0:rmax)
706 double precision,
optional,
intent(out) :: Cerr(0:rmax),Cerr2(0:rmax)
707 integer,
optional,
intent(in) :: id_in
708 double complex :: C2uv(0:rmax/2,0:rmax,0:rmax),C2(0:rmax/2,0:rmax,0:rmax)
709 double complex :: Ccoliuv(0:rmax,0:rmax,0:rmax),Ccoli(0:rmax,0:rmax,0:rmax)
710 double complex :: Cdduv(0:rmax,0:rmax,0:rmax)
711 double complex :: Cdd(0:rmax,0:rmax,0:rmax)
712 double precision :: Cerraux(0:rmax),Cerr2aux(0:rmax)
713 double complex :: elimcminf2
714 double complex args(6)
715 integer :: n0,rank,errflag,id
716 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD)
717 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
718 double precision :: Cacc(0:rmax),norm,norm_coli,norm_dd,Cacc2(0:rmax),Cdiff(0:rmax)
719 integer :: accflagDD,errflagDD,NDD,rankDD
720 logical :: mflag,eflag
725 call errout_cll(
'C_cll',
'Nmax_cll smaller 3',eflag,.true.)
727 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 3'
733 call errout_cll(
'C_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
736 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
742 if (
present(id_in))
then
758 call setmasterfname_cll(
'C_cll')
759 call setmastern_cll(3)
760 call setmasterr_cll(rmax)
761 call setmasterargs_cll(6,args)
773 call calcc(ccoli,ccoliuv,p10,p21,p20,m02,m12,m22,rmax,id,cerraux,cerr2aux)
775 norm = abs(ccoli(0,0,0))
779 norm = max(norm,abs(ccoli(0,n1,n2)))
782 if (norm.eq.0d0)
then
783 norm = max(abs(p10),abs(p21),abs(p20),abs(m02),abs(m12),abs(m22))
791 if (norm.ne.0d0)
then
793 cacc2 = cerr2aux/norm
799 if (
present(cerr)) cerr = cerraux
800 if (
present(cerr2)) cerr2 = cerr2aux
804 c(0:rmax/2,0:rmax,0:rmax) = ccoli(0:rmax/2,0:rmax,0:rmax)
805 cuv(0:rmax/2,0:rmax,0:rmax) = ccoliuv(0:rmax/2,0:rmax,0:rmax)
823 call c_dd(cdd,cdduv,q10,q21,q20,mm02,mm12,mm22,rank,id)
824 c(0:rank/2,0:rank,0:rank) = cdd(0:rank/2,0:rank,0:rank)
825 cuv(0:rank/2,0:rank,0:rank) = cdduv(0:rank/2,0:rank,0:rank)
827 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
828 if(
present(cerr)) cerr(0:rmax) = accabsdd(0:rmax)
829 if(
present(cerr2)) cerr2(0:rmax) = accabs2dd(0:rmax)
835 norm = max(norm,abs(c(0,n1,n2)))
838 if (norm.eq.0d0)
then
839 norm = max(abs(p10),abs(p21),abs(p20),abs(m02),abs(m12),abs(m22))
846 if (norm.ne.0d0)
then
847 cacc = accabsdd(0:rmax)/norm
848 cacc2 = accabs2dd(0:rmax)/norm
863 call calcc(ccoli,ccoliuv,p10,p21,p20,m02,m12,m22,rmax,id,cerraux,cerr2aux)
865 c(0:rmax/2,0:rmax,0:rmax) = ccoli(0:rmax/2,0:rmax,0:rmax)
866 cuv(0:rmax/2,0:rmax,0:rmax) = ccoliuv(0:rmax/2,0:rmax,0:rmax)
882 call c_dd(cdd,cdduv,q10,q21,q20,mm02,mm12,mm22,rank,id)
883 c2(0:rank/2,0:rank,0:rank) = cdd(0:rank/2,0:rank,0:rank)
884 c2uv(0:rank/2,0:rank,0:rank) = cdduv(0:rank/2,0:rank,0:rank)
886 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
889 norm_coli = abs(c(0,0,0))
890 norm_dd = abs(c2(0,0,0))
894 norm_coli = max(norm_coli,abs(c(0,n1,n2)))
895 norm_dd = max(norm_dd,abs(c(0,n1,n2)))
898 if (norm_coli.eq.0d0)
then
899 norm_coli = max(abs(p10),abs(p21),abs(p20),abs(m02),abs(m12),abs(m22))
900 if(norm_coli.ne.0d0)
then
901 norm_coli=1d0/norm_coli
906 if (norm_dd.eq.0d0)
then
907 norm_dd = max(abs(p10),abs(p21),abs(p20),abs(m02),abs(m12),abs(m22))
908 if(norm_dd.ne.0d0)
then
914 norm = min(norm_coli,norm_dd)
916 call checkcoefsc_cll(c,c2,p10,p21,p20,m02,m12,m22,rmax,norm,cdiff)
919 if (cerraux(rmax).lt.accabsdd(rmax))
then
920 if (
present(cerr)) cerr = max(cerraux,cdiff)
921 if (
present(cerr2)) cerr2 = cerr2aux
922 cacc = max(cerraux/norm_coli,cdiff/norm)
923 cacc2 = cerr2aux/norm_coli
928 if (
present(cerr)) cerr = max(accabsdd(0:rmax),cdiff)
929 if (
present(cerr2)) cerr2 = accabs2dd(0:rmax)
930 cacc = max(accabsdd(0:rmax)/norm_dd,cdiff/norm)
931 cacc2 = accabs2dd(0:rmax)/norm_dd
951 write(
ncpout_cll,*)
' Further output of Critical Points for C_cll suppressed '
980 write(
ncpout2_cll,*)
' Further output of Critical Points for C_cll suppressed '
1001 subroutine c_arrays_cll(C,Cuv,MomInv,masses2,rmax,Cerr,Cerr2)
1003 integer,
intent(in) :: rmax
1004 double complex,
intent(in) :: MomInv(3), masses2(0:2)
1005 double complex,
intent(out) :: Cuv(0:rmax/2,0:rmax,0:rmax)
1006 double complex,
intent(out) :: C(0:rmax/2,0:rmax,0:rmax)
1007 double precision,
optional,
intent(out) :: Cerr(0:rmax),Cerr2(0:rmax)
1008 double precision :: Cerraux(0:rmax),Cerr2aux(0:rmax)
1010 if (
present(cerr))
then
1011 if (
present(cerr2))
then
1012 call c_main_cll(c,cuv,mominv(1),mominv(2),mominv(3), &
1013 masses2(0),masses2(1),masses2(2),rmax,cerr,cerr2=cerr2)
1015 call c_main_cll(c,cuv,mominv(1),mominv(2),mominv(3), &
1016 masses2(0),masses2(1),masses2(2),rmax,cerr,cerr2=cerr2aux)
1019 if (
present(cerr2))
then
1020 call c_main_cll(c,cuv,mominv(1),mominv(2),mominv(3), &
1021 masses2(0),masses2(1),masses2(2),rmax,cerraux,cerr2=cerr2)
1023 call c_main_cll(c,cuv,mominv(1),mominv(2),mominv(3), &
1024 masses2(0),masses2(1),masses2(2),rmax,cerraux,cerr2=cerr2aux)
1039 subroutine c_list_cll(C,Cuv,p10,p21,p20,m02,m12,m22,rmax,Cerr,Cerr2)
1041 integer,
intent(in) :: rmax
1042 double complex,
intent(in) :: p10,p21,p20,m02,m12,m22
1043 double complex,
intent(out) :: Cuv(:),C(:)
1044 double precision,
optional,
intent(out) :: Cerr(0:rmax),Cerr2(0:rmax)
1049 call errout_cll(
'C_cll',
'Nmax_cll smaller 3',eflag,.true.)
1051 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 3'
1057 call errout_cll(
'C_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1060 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1065 call c_list_checked_cll(c,cuv,p10,p21,p20,m02,m12,m22,rmax,cerr,cerr2)
1070 subroutine c_list_checked_cll(C,Cuv,p10,p21,p20,m02,m12,m22,rmax,Cerr,Cerr2)
1072 integer,
intent(in) :: rmax
1073 double complex,
intent(in) :: p10,p21,p20,m02,m12,m22
1074 double precision,
optional,
intent(out) :: Cerr(0:rmax),Cerr2(0:rmax)
1075 double complex,
intent(out) :: Cuv(NCoefs(rmax,3)),C(NCoefs(rmax,3))
1076 double complex :: Cuv_aux(0:rmax/2,0:rmax,0:rmax)
1077 double complex :: C_aux(0:rmax/2,0:rmax,0:rmax)
1078 double precision :: Cerraux(0:rmax),Cerr2aux(0:rmax)
1079 integer :: r,n0,n1,n2,cnt
1082 if (
present(cerr))
then
1083 if (
present(cerr2))
then
1085 m02,m12,m22,rmax,cerr,cerr2=cerr2)
1088 m02,m12,m22,rmax,cerr,cerr2=cerr2aux)
1091 if (
present(cerr2))
then
1093 m02,m12,m22,rmax,cerraux,cerr2=cerr2)
1096 m02,m12,m22,rmax,cerraux,cerr2=cerr2aux)
1107 c(cnt) = c_aux(n0,n1,n2)
1108 cuv(cnt) = cuv_aux(n0,n1,n2)
1127 integer,
intent(in) :: rmax
1128 double complex,
intent(in) :: MomInv(3), masses2(0:2)
1129 double complex,
intent(out) :: Cuv(:),C(:)
1130 double precision,
optional,
intent(out) :: Cerr(0:rmax),Cerr2(0:rmax)
1135 call errout_cll(
'C_cll',
'Nmax_cll smaller 3',eflag,.true.)
1137 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 3'
1143 call errout_cll(
'C_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1146 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1158 integer,
intent(in) :: rmax
1159 double complex,
intent(in) :: MomInv(3), masses2(0:2)
1160 double complex,
intent(out) :: Cuv(NCoefs(rmax,3)),C(NCoefs(rmax,3))
1161 double precision,
optional,
intent(out) :: Cerr(0:rmax),Cerr2(0:rmax)
1162 double complex :: Cuv_aux(0:rmax/2,0:rmax,0:rmax)
1163 double complex :: C_aux(0:rmax/2,0:rmax,0:rmax)
1164 double precision :: Cerraux(0:rmax),Cerr2aux(0:rmax)
1165 integer :: r,n0,n1,n2,cnt
1167 if (
present(cerr))
then
1168 if (
present(cerr2))
then
1169 call c_main_cll(c_aux,cuv_aux,mominv(1),mominv(2),mominv(3), &
1170 masses2(0),masses2(1),masses2(2),rmax,cerr,cerr2=cerr2)
1172 call c_main_cll(c_aux,cuv_aux,mominv(1),mominv(2),mominv(3), &
1173 masses2(0),masses2(1),masses2(2),rmax,cerr,cerr2=cerr2aux)
1176 if (
present(cerr2))
then
1177 call c_main_cll(c_aux,cuv_aux,mominv(1),mominv(2),mominv(3), &
1178 masses2(0),masses2(1),masses2(2),rmax,cerraux,cerr2=cerr2)
1180 call c_main_cll(c_aux,cuv_aux,mominv(1),mominv(2),mominv(3), &
1181 masses2(0),masses2(1),masses2(2),rmax,cerraux,cerr2=cerr2aux)
1192 c(cnt) = c_aux(n0,n1,n2)
1193 cuv(cnt) = cuv_aux(n0,n1,n2)
1211 subroutine d_main_cll(D,Duv,p10,p21,p32,p30,p20,p31, &
1212 m02,m12,m22,m32,rmax,Derr,id_in,Derr2)
1214 integer,
intent(in) :: rmax
1215 double complex,
intent(in) :: p10,p21,p32,p30,p20,p31,m02,m12,m22,m32
1216 double precision :: q10,q21,q32,q30,q20,q31
1217 double complex :: mm02,mm12,mm22,mm32
1218 double complex,
intent(out) :: D(0:rmax/2,0:rmax,0:rmax,0:rmax)
1219 double complex,
intent(out) :: Duv(0:rmax/2,0:rmax,0:rmax,0:rmax)
1220 double precision,
optional,
intent(out) :: Derr(0:rmax),Derr2(0:rmax)
1221 integer,
optional,
intent(in) :: id_in
1222 double complex :: D2uv(0:rmax/2,0:rmax,0:rmax,0:rmax)
1223 double complex :: D2(0:rmax/2,0:rmax,0:rmax,0:rmax)
1224 double complex :: Dcoliuv(0:rmax,0:rmax,0:rmax,0:rmax)
1225 double complex :: Dcoli(0:rmax,0:rmax,0:rmax,0:rmax)
1226 double complex :: Ddduv(0:rmax,0:rmax,0:rmax,0:rmax)
1227 double complex :: Ddd(0:rmax,0:rmax,0:rmax,0:rmax)
1228 double precision :: Derraux(0:rmax),Derr2aux(0:rmax),Ddiff(0:rmax)
1229 double complex :: elimcminf2
1230 double complex :: args(10)
1231 integer :: n0,rank,errflag,id
1232 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD),Dacc(0:rmax),norm,norm_coli,norm_dd,Dacc2(0:rmax)
1233 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
1234 integer :: accflagDD,errflagDD,NDD,rankDD
1235 logical :: mflag,eflag
1236 integer :: r,n1,n2,n3
1240 call errout_cll(
'D_cll',
'Nmax_cll smaller 4',eflag,.true.)
1242 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 4'
1248 call errout_cll(
'D_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1251 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1257 if (
present(id_in))
then
1276 call setmasterfname_cll(
'D_cll')
1277 call setmastern_cll(4)
1278 call setmasterr_cll(rmax)
1279 call setmasterargs_cll(10,args)
1291 call calcd(dcoli,dcoliuv,p10,p21,p32,p30,p20,p31, &
1292 m02,m12,m22,m32,rmax,id,derraux,derr2aux)
1294 norm = abs(dcoli(0,0,0,0))
1299 norm = max(norm,abs(dcoli(0,n1,n2,n3)))
1303 if (norm.eq.0d0)
then
1304 norm = max(abs(p10),abs(p21),abs(p32),abs(p30),abs(p20),abs(p31), &
1305 abs(m02),abs(m12),abs(m22),abs(m32))
1306 if(norm.ne.0d0)
then
1312 if (norm.ne.0d0)
then
1314 dacc2 = derr2aux/norm
1320 if (
present(derr)) derr = derraux
1321 if (
present(derr2)) derr2 = derr2aux
1325 d(0:rmax/2,0:rmax,0:rmax,0:rmax) = dcoli(0:rmax/2,0:rmax,0:rmax,0:rmax)
1326 duv(0:rmax/2,0:rmax,0:rmax,0:rmax) = dcoliuv(0:rmax/2,0:rmax,0:rmax,0:rmax)
1354 call d_dd(ddd,ddduv,q10,q21,q32,q30,q20,q31, &
1355 mm02,mm12,mm22,mm32,rank,id)
1356 d(0:rank/2,0:rank,0:rank,0:rank) = ddd(0:rank/2,0:rank,0:rank,0:rank)
1357 duv(0:rank/2,0:rank,0:rank,0:rank) = ddduv(0:rank/2,0:rank,0:rank,0:rank)
1359 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
1360 if (
present(derr)) derr(0:rmax) = accabsdd(0:rmax)
1361 if (
present(derr2)) derr2(0:rmax) = accabs2dd(0:rmax)
1363 norm = abs(d(0,0,0,0))
1368 norm = max(norm,abs(d(0,n1,n2,n3)))
1372 if (norm.eq.0d0)
then
1373 norm = max(abs(p10),abs(p21),abs(p32),abs(p30),abs(p20),abs(p31), &
1374 abs(m02),abs(m12),abs(m22),abs(m32))
1375 if(norm.ne.0d0)
then
1381 if (norm.ne.0d0)
then
1382 dacc = accabsdd(0:rmax)/norm
1383 dacc2 = accabs2dd(0:rmax)/norm
1398 call calcd(dcoli,dcoliuv,p10,p21,p32,p30,p20,p31, &
1399 m02,m12,m22,m32,rmax,id,derraux,derr2aux)
1401 d(0:rmax/2,0:rmax,0:rmax,0:rmax) = dcoli(0:rmax/2,0:rmax,0:rmax,0:rmax)
1402 duv(0:rmax/2,0:rmax,0:rmax,0:rmax) = dcoliuv(0:rmax/2,0:rmax,0:rmax,0:rmax)
1422 call d_dd(ddd,ddduv,q10,q21,q32,q30,q20,q31, &
1423 mm02,mm12,mm22,mm32,rank,id)
1425 d2(n0,0:rank,0:rank,0:rank) = ddd(n0,0:rank,0:rank,0:rank)
1426 d2uv(n0,0:rank,0:rank,0:rank) = ddduv(n0,0:rank,0:rank,0:rank)
1428 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
1430 norm_coli = abs(d(0,0,0,0))
1431 norm_dd = abs(d2(0,0,0,0))
1436 norm_coli = max(norm_coli,abs(d(0,n1,n2,n3)))
1437 norm_dd = max(norm_dd,abs(d2(0,n1,n2,n3)))
1441 if (norm_coli.eq.0d0)
then
1442 norm_coli = max(abs(p10),abs(p21),abs(p32),abs(p30),abs(p20),abs(p31), &
1443 abs(m02),abs(m12),abs(m22),abs(m32))
1444 if(norm_coli.ne.0d0)
then
1445 norm_coli=1d0/norm_coli**2
1450 if (norm_dd.eq.0d0)
then
1451 norm_dd = max(abs(p10),abs(p21),abs(p32),abs(p30),abs(p20),abs(p31), &
1452 abs(m02),abs(m12),abs(m22),abs(m32))
1453 if(norm_dd.ne.0d0)
then
1454 norm_dd=1d0/norm_dd**2
1459 norm = min(norm_coli,norm_dd)
1463 m02,m12,m22,m32,rmax,norm,ddiff)
1466 if (derraux(rmax).lt.accabsdd(rmax))
then
1467 if (
present(derr)) derr = max(derraux,ddiff)
1468 if (
present(derr2)) derr2 = derr2aux
1469 if (norm.ne.0d0)
then
1470 dacc = max(derraux/norm_coli,ddiff/norm)
1471 dacc2 = derr2aux/norm_coli
1480 if (
present(derr)) derr = max(accabsdd(0:rmax),ddiff)
1481 if (
present(derr2)) derr2 = accabs2dd(0:rmax)
1482 if (norm.ne.0d0)
then
1483 dacc = max(accabsdd(0:rmax)/norm_dd,ddiff/norm)
1484 dacc2 = accabs2dd(0:rmax)/norm_dd
1508 write(
ncpout_cll,*)
' Further output of Critical Points for D_cll suppressed '
1523 write(
ncpout2_cll,*)
' Further output of Critical Points for D_cll suppressed '
1544 subroutine d_arrays_cll(D,Duv,MomInv,masses2,rmax,Derr,Derr2)
1546 integer,
intent(in) :: rmax
1547 double complex,
intent(in) :: MomInv(6), masses2(0:3)
1548 double complex,
intent(out) :: D(0:rmax/2,0:rmax,0:rmax,0:rmax)
1549 double complex,
intent(out) :: Duv(0:rmax/2,0:rmax,0:rmax,0:rmax)
1550 double precision,
optional,
intent(out) :: Derr(0:rmax),Derr2(0:rmax)
1551 double precision :: Derraux(0:rmax),Derr2aux(0:rmax)
1557 call errout_cll(
'D_cll',
'Nmax_cll smaller 4',eflag,.true.)
1559 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 4'
1565 call errout_cll(
'D_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1568 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1573 if (
present(derr))
then
1574 if (
present(derr2))
then
1575 call d_main_cll(d,duv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1576 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derr,derr2=derr2)
1578 call d_main_cll(d,duv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1579 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derr)
1582 if (
present(derr2))
then
1583 call d_main_cll(d,duv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1584 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derraux,derr2=derr2)
1586 call d_main_cll(d,duv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1587 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derraux)
1602 subroutine d_list_cll(D,Duv,p10,p21,p32,p30,p20,p31,m02,m12,m22,m32,rmax,Derr,Derr2)
1604 integer,
intent(in) :: rmax
1605 double complex,
intent(in) :: p10,p21,p32,p30,p20,p31,m02,m12,m22,m32
1606 double complex,
intent(out) :: D(:),Duv(:)
1607 double precision,
optional,
intent(out) :: Derr(0:rmax),Derr2(0:rmax)
1612 call errout_cll(
'D_cll',
'Nmax_cll smaller 4',eflag,.true.)
1614 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 4'
1620 call errout_cll(
'D_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1623 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1629 m02,m12,m22,m32,rmax,derr,derr2)
1634 subroutine d_list_checked_cll(D,Duv,p10,p21,p32,p30,p20,p31,m02,m12,m22,m32,rmax,Derr,Derr2)
1636 integer,
intent(in) :: rmax
1637 double complex,
intent(in) :: p10,p21,p32,p30,p20,p31,m02,m12,m22,m32
1638 double complex,
intent(out) :: D(NCoefs(rmax,4)),Duv(NCoefs(rmax,4))
1639 double precision,
optional,
intent(out) :: Derr(0:rmax),Derr2(0:rmax)
1640 double complex :: D_aux(0:rmax/2,0:rmax,0:rmax,0:rmax)
1641 double complex :: Duv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax)
1642 double precision :: Derraux(0:rmax),Derr2aux(0:rmax)
1643 integer :: r,n0,n1,n2,n3,cnt
1645 if (
present(derr))
then
1646 if (
present(derr2))
then
1647 call d_main_cll(d_aux,duv_aux,p10,p21,p32,p30,p20,p31, &
1648 m02,m12,m22,m32,rmax,derr,derr2=derr2)
1650 call d_main_cll(d_aux,duv_aux,p10,p21,p32,p30,p20,p31, &
1651 m02,m12,m22,m32,rmax,derr)
1654 if (
present(derr2))
then
1655 call d_main_cll(d_aux,duv_aux,p10,p21,p32,p30,p20,p31, &
1656 m02,m12,m22,m32,rmax,derraux,derr2=derr2)
1658 call d_main_cll(d_aux,duv_aux,p10,p21,p32,p30,p20,p31, &
1659 m02,m12,m22,m32,rmax,derraux)
1667 do n2=r-2*n0-n1,0,-1
1671 d(cnt) = d_aux(n0,n1,n2,n3)
1672 duv(cnt) = duv_aux(n0,n1,n2,n3)
1692 integer,
intent(in) :: rmax
1693 double complex,
intent(in) :: MomInv(6), masses2(0:3)
1694 double complex,
intent(out) :: D(:),Duv(:)
1695 double precision,
optional,
intent(out) :: Derr(0:rmax),Derr2(0:rmax)
1700 call errout_cll(
'D_cll',
'Nmax_cll smaller 4',eflag,.true.)
1702 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 4'
1708 call errout_cll(
'D_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1711 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1723 integer,
intent(in) :: rmax
1724 double complex,
intent(in) :: MomInv(6), masses2(0:3)
1725 double complex,
intent(out) :: D(NCoefs(rmax,4)),Duv(NCoefs(rmax,4))
1726 double precision,
optional,
intent(out) :: Derr(0:rmax),Derr2(0:rmax)
1727 double complex :: D_aux(0:rmax/2,0:rmax,0:rmax,0:rmax)
1728 double complex :: Duv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax)
1729 double precision :: Derraux(0:rmax),Derr2aux(0:rmax)
1730 integer :: r,n0,n1,n2,n3,cnt
1732 if (
present(derr))
then
1733 if (
present(derr2))
then
1734 call d_main_cll(d_aux,duv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1735 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derr,derr2=derr2)
1737 call d_main_cll(d_aux,duv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1738 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derr)
1741 if (
present(derr2))
then
1742 call d_main_cll(d_aux,duv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1743 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derraux,derr2=derr2)
1745 call d_main_cll(d_aux,duv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
1746 masses2(0),masses2(1),masses2(2),masses2(3),rmax,derraux)
1754 do n2=r-2*n0-n1,0,-1
1758 d(cnt) = d_aux(n0,n1,n2,n3)
1759 duv(cnt) = duv_aux(n0,n1,n2,n3)
1778 subroutine e_main_cll(E,Euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
1779 m02,m12,m22,m32,m42,rmax,Eerr,id_in,Eerr2)
1781 integer,
intent(in) :: rmax
1782 double complex,
intent(in) :: p10,p21,p32,p43,p40,p20,p31,p42,p30,p41
1783 double complex,
intent(in) :: m02,m12,m22,m32,m42
1784 double complex,
intent(out) :: E(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
1785 double complex,
intent(out) :: Euv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
1786 double precision,
optional,
intent(out) :: Eerr(0:rmax),Eerr2(0:rmax)
1787 double precision :: q10,q21,q32,q43,q40,q20,q31,q42,q30,q41
1788 double complex :: mm02,mm12,mm22,mm32,mm42
1789 double precision :: Eerraux(0:rmax),Eerr2aux(0:rmax),Ediff(0:rmax)
1790 integer,
optional,
intent(in) :: id_in
1791 double complex :: E2uv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
1792 double complex :: E2(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
1793 double complex :: Edd(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
1794 double complex :: elimcminf2
1795 double complex :: args(15)
1796 integer :: n0,rank,errflag,id
1797 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD),Eacc(0:rmax),norm,norm_coli,norm_dd,Eacc2(0:rmax)
1798 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
1799 integer :: accflagDD,errflagDD,NDD,rankDD
1800 logical :: mflag,eflag
1801 integer :: r,n1,n2,n3,n4
1805 call errout_cll(
'E_cll',
'Nmax_cll smaller 5',eflag,.true.)
1807 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 5'
1813 call errout_cll(
'E_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
1816 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
1822 if (
present(id_in))
then
1846 call setmasterfname_cll(
'E_cll')
1847 call setmastern_cll(5)
1848 call setmasterr_cll(rmax)
1849 call setmasterargs_cll(15,args)
1861 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
1862 m02,m12,m22,m32,m42,rmax,id,eerraux,eerr2aux)
1864 norm = abs(e(0,0,0,0,0))
1870 norm = max(norm,abs(e(0,n1,n2,n3,n4)))
1875 if (norm.eq.0d0)
then
1876 norm = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p40), &
1877 abs(p20),abs(p31),abs(p42),abs(p30),abs(p41), &
1878 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42))
1879 if(norm.ne.0d0)
then
1885 if (norm.ne.0d0)
then
1887 eacc2 = eerr2aux/norm
1893 if (
present(eerr)) eerr = eerraux
1894 if (
present(eerr2)) eerr2 = eerr2aux
1905 call errout_cll(
'E_cll',
'rank higher than maximum rank implemented in DD library',eflag)
1907 write(
nerrout_cll,*)
'E_cll: 5-point function of rank>5 not implemented in DD library'
1930 call e_dd(edd,q10,q21,q32,q43,q40,q20,q31,q42,q30,q41, &
1931 mm02,mm12,mm22,mm32,mm42,rank,id)
1932 e(0:rank/2,0:rank,0:rank,0:rank,0:rank) = edd(0:rank/2,0:rank,0:rank,0:rank,0:rank)
1935 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
1936 if (
present(eerr)) eerr(0:rmax) = accabsdd(0:rmax)
1937 if (
present(eerr2)) eerr2(0:rmax) = accabs2dd(0:rmax)
1939 norm = abs(e(0,0,0,0,0))
1945 norm = max(norm,abs(e(0,n1,n2,n3,n4)))
1950 if (norm.eq.0d0)
then
1951 norm = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p40), &
1952 abs(p20),abs(p31),abs(p42),abs(p30),abs(p41), &
1953 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42))
1954 if(norm.ne.0d0)
then
1960 if (norm.ne.0d0)
then
1961 eacc = accabsdd(0:rmax)/norm
1962 eacc2 = accabs2dd(0:rmax)/norm
1979 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
1980 m02,m12,m22,m32,m42,rmax,id,eerraux,eerr2aux)
1986 call errout_cll(
'E_cll',
'rank higher than maximum rank implemented in DD library',eflag)
1988 write(
nerrout_cll,*)
'E_cll: 5-point function of rank>5 not implemented in DD library'
2011 call e_dd(edd,q10,q21,q32,q43,q40,q20,q31,q42,q30,q41, &
2012 mm02,mm12,mm22,mm32,mm42,rank,id)
2013 e2(0:rank/2,0:rank,0:rank,0:rank,0:rank) = edd(0:rank/2,0:rank,0:rank,0:rank,0:rank)
2016 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
2018 norm_coli = abs(e(0,0,0,0,0))
2019 norm_dd = abs(e2(0,0,0,0,0))
2025 norm_coli = max(norm_coli,abs(e(0,n1,n2,n3,n4)))
2026 norm_dd = max(norm_dd,abs(e2(0,n1,n2,n3,n4)))
2031 if (norm_coli.eq.0d0)
then
2032 norm_coli = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p40), &
2033 abs(p20),abs(p31),abs(p42),abs(p30),abs(p41), &
2034 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42))
2035 if(norm_coli.ne.0d0)
then
2036 norm_coli=1d0/norm_coli**3
2041 if (norm_dd.eq.0d0)
then
2042 norm_dd = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p40), &
2043 abs(p20),abs(p31),abs(p42),abs(p30),abs(p41), &
2044 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42))
2045 if(norm_dd.ne.0d0)
then
2046 norm_dd=1d0/norm_dd**3
2051 norm=min(norm_coli,norm_dd)
2054 call checkcoefse_cll(e,e2,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2055 m02,m12,m22,m32,m42,rmax,norm,ediff)
2058 if (eerraux(rmax).lt.accabsdd(rmax))
then
2059 if (
present(eerr)) eerr = max(eerraux,ediff)
2060 if (
present(eerr2)) eerr2 = eerr2aux
2061 if (norm.ne.0d0)
then
2062 eacc = max(eerraux/norm_coli,ediff/norm)
2063 eacc2 = eerr2aux/norm_coli
2072 if (
present(eerr)) eerr = max(accabsdd(0:rmax),ediff)
2073 if (
present(eerr2)) eerr2 = accabs2dd(0:rmax)
2074 if (norm.ne.0d0)
then
2075 eacc = max(accabsdd(0:rmax)/norm_dd,ediff/norm)
2076 eacc2 = accabs2dd(0:rmax)/norm_dd
2100 write(
ncpout_cll,*)
' Further output of Critical Points for E_cll suppressed '
2114 write(
ncpout2_cll,*)
' Further output of Critical Points for E_cll suppressed '
2136 subroutine e_arrays_cll(E,Euv,MomInv,masses2,rmax,Eerr,Eerr2)
2138 integer,
intent(in) :: rmax
2139 double complex,
intent(in) :: MomInv(10), masses2(0:4)
2140 double complex,
intent(out) :: E(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
2141 double complex,
intent(out) :: Euv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
2142 double precision,
optional,
intent(out) :: Eerr(0:rmax),Eerr2(0:rmax)
2143 double precision :: Eerraux(0:rmax),Eerr2aux(0:rmax)
2145 if (
present(eerr))
then
2146 if (
present(eerr2))
then
2147 call e_main_cll(e,euv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2148 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2149 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerr,eerr2=eerr2)
2151 call e_main_cll(e,euv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2152 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2153 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerr)
2156 if (
present(eerr2))
then
2157 call e_main_cll(e,euv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2158 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2159 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerraux,eerr2=eerr2)
2161 call e_main_cll(e,euv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2162 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2163 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerraux)
2180 subroutine e_list_cll(E,Euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2181 m02,m12,m22,m32,m42,rmax,Eerr,Eerr2)
2183 integer,
intent(in) :: rmax
2184 double complex,
intent(in) :: p10,p21,p32,p43,p40,p20,p31,p42,p30,p41
2185 double complex,
intent(in) :: m02,m12,m22,m32,m42
2186 double complex,
intent(out) :: E(:),Euv(:)
2187 double precision,
optional,
intent(out) :: Eerr(0:rmax),Eerr2(0:rmax)
2192 call errout_cll(
'E_cll',
'Nmax_cll smaller 5',eflag,.true.)
2194 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 5'
2200 call errout_cll(
'E_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
2203 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
2208 call e_list_checked_cll(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2209 m02,m12,m22,m32,m42,rmax,eerr,eerr2)
2214 subroutine e_list_checked_cll(E,Euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2215 m02,m12,m22,m32,m42,rmax,Eerr,Eerr2)
2217 integer,
intent(in) :: rmax
2218 double complex,
intent(in) :: p10,p21,p32,p43,p40,p20,p31,p42,p30,p41
2219 double complex,
intent(in) :: m02,m12,m22,m32,m42
2220 double complex,
intent(out) :: E(NCoefs(rmax,5)),Euv(NCoefs(rmax,5))
2221 double precision,
optional,
intent(out) :: Eerr(0:rmax),Eerr2(0:rmax)
2222 double complex :: E_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
2223 double complex :: Euv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
2224 double precision :: Eerraux(0:rmax),Eerr2aux(0:rmax)
2225 integer :: r,n0,n1,n2,n3,n4,cnt
2227 if (
present(eerr))
then
2228 if (
present(eerr2))
then
2229 call e_main_cll(e_aux,euv_aux,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2230 m02,m12,m22,m32,m42,rmax,eerr,eerr2=eerr2)
2232 call e_main_cll(e_aux,euv_aux,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2233 m02,m12,m22,m32,m42,rmax,eerr)
2236 if (
present(eerr2))
then
2237 call e_main_cll(e_aux,euv_aux,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2238 m02,m12,m22,m32,m42,rmax,eerraux,eerr2=eerr2)
2240 call e_main_cll(e_aux,euv_aux,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
2241 m02,m12,m22,m32,m42,rmax,eerraux)
2249 do n2=r-2*n0-n1,0,-1
2250 do n3=r-2*n0-n1-n2,0,-1
2254 e(cnt) = e_aux(n0,n1,n2,n3,n4)
2255 euv(cnt) = euv_aux(n0,n1,n2,n3,n4)
2277 integer,
intent(in) :: rmax
2278 double complex,
intent(in) :: MomInv(10), masses2(0:4)
2279 double complex,
intent(out) :: E(:),Euv(:)
2280 double precision,
optional,
intent(out) :: Eerr(0:rmax),Eerr2(0:rmax)
2285 call errout_cll(
'E_cll',
'Nmax_cll smaller 5',eflag,.true.)
2287 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 5'
2293 call errout_cll(
'E_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
2296 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
2308 integer,
intent(in) :: rmax
2309 double complex,
intent(in) :: MomInv(10), masses2(0:4)
2310 double complex,
intent(out) :: E(NCoefs(rmax,5)),Euv(NCoefs(rmax,5))
2311 double precision,
optional,
intent(out) :: Eerr(0:rmax),Eerr2(0:rmax)
2312 double complex :: E_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
2313 double complex :: Euv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
2314 double precision :: Eerraux(0:rmax),Eerr2aux(0:rmax)
2315 integer :: r,n0,n1,n2,n3,n4,cnt
2317 if (
present(eerr))
then
2318 if (
present(eerr2))
then
2319 call e_main_cll(e_aux,euv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2320 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2321 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerr,eerr2=eerr2)
2323 call e_main_cll(e_aux,euv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2324 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2325 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerr)
2328 if (
present(eerr2))
then
2329 call e_main_cll(e_aux,euv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2330 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2331 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerraux,eerr2=eerr2)
2333 call e_main_cll(e_aux,euv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
2334 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
2335 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),rmax,eerraux)
2343 do n2=r-2*n0-n1,0,-1
2344 do n3=r-2*n0-n1-n2,0,-1
2348 e(cnt) = e_aux(n0,n1,n2,n3,n4)
2349 euv(cnt) = euv_aux(n0,n1,n2,n3,n4)
2369 subroutine f_main_cll(F,Fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2370 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,Ferr,id_in,Ferr2)
2372 integer,
intent(in) :: rmax
2373 double complex,
intent(in) :: p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40
2374 double complex,
intent(in) :: p51,p30,p41,p52,m02,m12,m22,m32,m42,m52
2375 double complex,
intent(out) :: F(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2376 double complex,
intent(out) :: Fuv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2377 double precision,
optional,
intent(out) ::Ferr(0:rmax),Ferr2(0:rmax)
2378 double precision :: q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40
2379 double precision :: q51,q30,q41,q52
2380 double complex :: mm02,mm12,mm22,mm32,mm42,mm52
2381 integer,
optional,
intent(in) :: id_in
2382 double complex :: F2uv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2383 double complex :: F2(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2384 double complex :: Fdd(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2385 double precision :: Ferraux(0:rmax),Ferr2aux(0:rmax),Fdiff(0:rmax)
2386 double complex :: elimcminf2
2387 double complex :: args(21)
2388 integer :: n0,rank,errflag,id
2389 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD),Facc(0:rmax),norm,norm_coli,norm_dd,Facc2(0:rmax)
2390 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
2391 integer :: accflagDD,errflagDD,NDD,rankDD
2392 logical :: mflag,eflag
2393 integer :: r,n1,n2,n3,n4,n5
2397 call errout_cll(
'F_cll',
'Nmax_cll smaller 6',eflag,.true.)
2399 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 6'
2405 call errout_cll(
'F_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
2408 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
2414 if (
present(id_in))
then
2444 call setmasterfname_cll(
'F_cll')
2445 call setmastern_cll(6)
2446 call setmasterr_cll(rmax)
2447 call setmasterargs_cll(21,args)
2459 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2460 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,id,ferraux,ferr2aux)
2462 norm = abs(f(0,0,0,0,0,0))
2469 norm = max(norm,abs(f(0,n1,n2,n3,n4,n5)))
2475 if (norm.eq.0d0)
then
2476 norm = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p54), &
2477 abs(p50),abs(p20),abs(p31),abs(p42),abs(p53), &
2478 abs(p40),abs(p51),abs(p30),abs(p41),abs(p52), &
2479 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42),abs(m52))
2480 if(norm.ne.0d0)
then
2486 if (norm.ne.0d0)
then
2488 facc2 = ferr2aux/norm
2494 if (
present(ferr)) ferr = ferraux
2495 if (
present(ferr2)) ferr2 = ferr2aux
2507 call errout_cll(
'F_cll',
'rank higher than maximum rank implemented in DD library',eflag)
2509 write(
nerrout_cll,*)
'F_cll: 6-point function of rank>6 not implemented in DD library'
2538 call f_dd(fdd,q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40, &
2539 q51,q30,q41,q52,mm02,mm12,mm22,mm32,mm42,mm52,rank,id)
2540 f(0:rank/2,0:rank,0:rank,0:rank,0:rank,0:rank) = fdd(0:rank/2,0:rank,0:rank,0:rank,0:rank,0:rank)
2543 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
2544 if (
present(ferr)) ferr(0:rmax) = accabsdd(0:rmax)
2545 if (
present(ferr2)) ferr2(0:rmax) = accabs2dd(0:rmax)
2547 norm = abs(f(0,0,0,0,0,0))
2554 norm = max(norm,abs(f(0,n1,n2,n3,n4,n5)))
2560 if (norm.eq.0d0)
then
2561 norm = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p54), &
2562 abs(p50),abs(p20),abs(p31),abs(p42),abs(p53), &
2563 abs(p40),abs(p51),abs(p30),abs(p41),abs(p52), &
2564 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42),abs(m52))
2565 if(norm.ne.0d0)
then
2571 if (norm.ne.0d0)
then
2572 facc = accabsdd(0:rmax)/norm
2573 facc2 = accabs2dd(0:rmax)/norm
2589 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2590 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,id,ferraux,ferr2aux)
2595 call errout_cll(
'F_cll',
'rank higher than maximum rank implemented in DD library',eflag)
2597 write(
nerrout_cll,*)
'F_cll: 6-point function of rank>6 not implemented in DD library'
2627 call f_dd(fdd,q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40, &
2628 q51,q30,q41,q52,mm02,mm12,mm22,mm32,mm42,mm52,rank,id)
2629 f2(0:rank/2,0:rank,0:rank,0:rank,0:rank,0:rank) = fdd(0:rank/2,0:rank,0:rank,0:rank,0:rank,0:rank)
2632 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
2634 norm_coli = abs(f(0,0,0,0,0,0))
2635 norm_dd = abs(f2(0,0,0,0,0,0))
2642 norm_coli = max(norm_coli,abs(f(0,n1,n2,n3,n4,n5)))
2643 norm_dd = max(norm_dd,abs(f2(0,n1,n2,n3,n4,n5)))
2649 if (norm_coli.eq.0d0)
then
2650 norm_coli = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p54), &
2651 abs(p50),abs(p20),abs(p31),abs(p42),abs(p53), &
2652 abs(p40),abs(p51),abs(p30),abs(p41),abs(p52), &
2653 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42),abs(m52))
2654 if(norm_coli.ne.0d0)
then
2655 norm_coli=1d0/norm_coli**4
2660 if (norm_dd.eq.0d0)
then
2661 norm_dd = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p54), &
2662 abs(p50),abs(p20),abs(p31),abs(p42),abs(p53), &
2663 abs(p40),abs(p51),abs(p30),abs(p41),abs(p52), &
2664 abs(m02),abs(m12),abs(m22),abs(m32),abs(m42),abs(m52))
2665 if(norm_dd.ne.0d0)
then
2666 norm_dd=1d0/norm_dd**4
2671 norm = min(norm_coli,norm_dd)
2674 call checkcoefsf_cll(f,f2,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2675 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,norm,fdiff)
2678 if (ferraux(rmax).lt.accabsdd(rmax))
then
2679 if (
present(ferr)) ferr = max(ferraux,fdiff)
2680 if (
present(ferr2)) ferr2 = ferr2aux
2681 if (norm.ne.0d0)
then
2682 facc = max(ferraux/norm_coli,fdiff/norm)
2683 facc2 = ferr2aux/norm_coli
2692 if (
present(ferr)) ferr = max(accabsdd(0:rmax),fdiff)
2693 if (
present(ferr2)) ferr2 = accabs2dd(0:rmax)
2694 if (norm.ne.0d0)
then
2695 facc = max(accabsdd(0:rmax)/norm_dd,fdiff/norm)
2696 facc2 = accabs2dd(0:rmax)/norm_dd
2720 write(
ncpout_cll,*)
' Further output of Critical Points for F_cll suppressed '
2734 write(
ncpout2_cll,*)
' Further output of Critical Points for F_cll suppressed '
2754 subroutine f_arrays_cll(F,Fuv,MomInv,masses2,rmax,Ferr,Ferr2)
2756 integer,
intent(in) :: rmax
2757 double complex,
intent(in) :: MomInv(15), masses2(0:5)
2758 double complex,
intent(out) :: F(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2759 double complex,
intent(out) :: Fuv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2760 double precision,
optional,
intent(out) ::Ferr(0:rmax),Ferr2(0:rmax)
2761 double precision :: Ferraux(0:rmax),Ferr2aux(0:rmax)
2763 if (
present(ferr))
then
2764 if (
present(ferr2))
then
2765 call f_main_cll(f,fuv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2766 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2767 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2768 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferr,ferr2=ferr2)
2770 call f_main_cll(f,fuv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2771 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2772 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2773 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferr)
2776 if (
present(ferr2))
then
2777 call f_main_cll(f,fuv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2778 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2779 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2780 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferraux,ferr2=ferr2)
2782 call f_main_cll(f,fuv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2783 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2784 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2785 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferraux)
2801 subroutine f_list_cll(F,Fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2802 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,Ferr,Ferr2)
2804 integer,
intent(in) :: rmax
2805 double complex,
intent(in) :: p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40
2806 double complex,
intent(in) :: p51,p30,p41,p52,m02,m12,m22,m32,m42,m52
2807 double complex,
intent(out) :: F(:),Fuv(:)
2808 double precision,
optional,
intent(out) ::Ferr(0:rmax),Ferr2(0:rmax)
2813 call errout_cll(
'F_cll',
'Nmax_cll smaller 6',eflag,.true.)
2815 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 6'
2821 call errout_cll(
'F_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
2824 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
2829 call f_list_checked_cll(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2830 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,ferr,ferr2)
2835 subroutine f_list_checked_cll(F,Fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2836 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,Ferr,Ferr2)
2838 integer,
intent(in) :: rmax
2839 double complex,
intent(in) :: p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40
2840 double complex,
intent(in) :: p51,p30,p41,p52,m02,m12,m22,m32,m42,m52
2841 double complex,
intent(out) :: F(NCoefs(rmax,6)),Fuv(NCoefs(rmax,6))
2842 double precision,
optional,
intent(out) ::Ferr(0:rmax),Ferr2(0:rmax)
2843 double complex :: F_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2844 double complex :: Fuv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2845 double precision :: Ferraux(0:rmax),Ferr2aux(0:rmax)
2846 integer :: r,n0,n1,n2,n3,n4,n5,cnt
2848 if (
present(ferr))
then
2849 if (
present(ferr2))
then
2850 call f_main_cll(f_aux,fuv_aux,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2851 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,ferr,ferr2=ferr2)
2853 call f_main_cll(f_aux,fuv_aux,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2854 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,ferr)
2857 if (
present(ferr2))
then
2858 call f_main_cll(f_aux,fuv_aux,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2859 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,ferraux,ferr2=ferr2)
2861 call f_main_cll(f_aux,fuv_aux,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
2862 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,ferraux)
2870 do n2=r-2*n0-n1,0,-1
2871 do n3=r-2*n0-n1-n2,0,-1
2872 do n4=r-2*n0-n1-n2-n3,0,-1
2873 n5=r-2*n0-n1-n2-n3-n4
2876 f(cnt) = f_aux(n0,n1,n2,n3,n4,n5)
2877 fuv(cnt) = fuv_aux(n0,n1,n2,n3,n4,n5)
2898 integer,
intent(in) :: rmax
2899 double complex,
intent(in) :: MomInv(15), masses2(0:5)
2900 double complex,
intent(out) :: F(:),Fuv(:)
2901 double precision,
optional,
intent(out) ::Ferr(0:rmax),Ferr2(0:rmax)
2906 call errout_cll(
'F_cll',
'Nmax_cll smaller 6',eflag,.true.)
2908 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 6'
2914 call errout_cll(
'F_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
2917 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
2929 integer,
intent(in) :: rmax
2930 double complex,
intent(in) :: MomInv(15), masses2(0:5)
2931 double complex,
intent(out) :: F(NCoefs(rmax,6)),Fuv(NCoefs(rmax,6))
2932 double precision,
optional,
intent(out) ::Ferr(0:rmax),Ferr2(0:rmax)
2933 double complex :: F_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2934 double complex :: Fuv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
2935 double precision :: Ferraux(0:rmax),Ferr2aux(0:rmax)
2936 integer :: r,n0,n1,n2,n3,n4,n5,cnt
2938 if (
present(ferr))
then
2939 if (
present(ferr2))
then
2940 call f_main_cll(f_aux,fuv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2941 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2942 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2943 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferr,ferr2=ferr2)
2945 call f_main_cll(f_aux,fuv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2946 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2947 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2948 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferr)
2951 if (
present(ferr2))
then
2952 call f_main_cll(f_aux,fuv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2953 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2954 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2955 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferraux,ferr2=ferr2)
2957 call f_main_cll(f_aux,fuv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
2958 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
2959 mominv(13),mominv(14),mominv(15),masses2(0),masses2(1), &
2960 masses2(2),masses2(3),masses2(4),masses2(5),rmax,ferraux)
2968 do n2=r-2*n0-n1,0,-1
2969 do n3=r-2*n0-n1-n2,0,-1
2970 do n4=r-2*n0-n1-n2-n3,0,-1
2971 n5=r-2*n0-n1-n2-n3-n4
2974 f(cnt) = f_aux(n0,n1,n2,n3,n4,n5)
2975 fuv(cnt) = fuv_aux(n0,n1,n2,n3,n4,n5)
2997 subroutine g_main_cll(G,Guv,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
2998 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
2999 m02,m12,m22,m32,m42,m52,m62,rmax,Gerr,id_in,Gerr2)
3001 integer,
intent(in) :: rmax
3002 double complex,
intent(in) :: p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53
3003 double complex,
intent(in) :: p64,p50,p61,p30,p41,p52,p63,p40,p51,p62
3004 double complex,
intent(in) :: m02,m12,m22,m32,m42,m52,m62
3005 double complex,
intent(out) :: G(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3006 double complex,
intent(out) :: Guv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3007 double precision,
optional,
intent(out) :: Gerr(0:rmax),Gerr2(0:rmax)
3008 double precision :: Gerraux(0:rmax),Gerr2aux(0:rmax)
3009 double precision :: Gacc(0:rmax), Gacc2(0:rmax),norm,norm_coli,norm_dd
3010 integer,
optional,
intent(in) :: id_in
3011 double complex :: args(28)
3012 double complex :: elimcminf2
3013 integer :: errflag,id
3014 logical :: mflag,eflag
3015 integer :: r,n1,n2,n3,n4,n5,n6
3019 call errout_cll(
'G_cll',
'Nmax_cll smaller 7',eflag,.true.)
3021 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 7'
3027 call errout_cll(
'G_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
3030 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
3036 if (
present(id_in))
then
3073 call setmasterfname_cll(
'G_cll')
3074 call setmastern_cll(7)
3075 call setmasterr_cll(rmax)
3076 call setmasterargs_cll(28,args)
3088 call calcg(g,guv,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3089 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3090 m02,m12,m22,m32,m42,m52,m62,rmax,id,gerraux,gerr2aux)
3092 norm = abs(g(0,0,0,0,0,0,0))
3098 do n5=0,r-n1-n2-n3-n4
3100 norm = max(norm,abs(g(0,n1,n2,n3,n4,n5,n6)))
3107 if (norm.eq.0d0)
then
3108 norm = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p54), &
3109 abs(p65),abs(p60),abs(p20),abs(p31),abs(p42), &
3110 abs(p53),abs(p64),abs(p50),abs(p61),abs(p30), &
3111 abs(p41),abs(p52),abs(p63),abs(p40),abs(p51), &
3112 abs(p62),abs(m02),abs(m12),abs(m22),abs(m32), &
3113 abs(m42),abs(m52),abs(m62))
3114 if(norm.ne.0d0)
then
3121 gacc2 = gerr2aux/norm
3123 if (
present(gerr)) gerr = gerraux
3124 if (
present(gerr2)) gerr2 = gerr2aux
3131 call errout_cll(
'G_cll',
'7-point functions not implemented in DD library',eflag)
3133 write(
nerrout_cll,*)
'G_cll: 7-point functions not implemented in DD library'
3134 write(
nerrout_cll,*)
'G_cll: --> use COLI implementation (mode_cll=1)'
3142 call calcg(g,guv,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3143 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3144 m02,m12,m22,m32,m42,m52,m62,rmax,id,gerraux,gerr2aux)
3146 norm = abs(g(0,0,0,0,0,0,0))
3152 do n5=0,r-n1-n2-n3-n4
3154 norm = max(norm,abs(g(0,n1,n2,n3,n4,n5,n6)))
3161 if (norm.eq.0d0)
then
3162 norm = max(abs(p10),abs(p21),abs(p32),abs(p43),abs(p54), &
3163 abs(p65),abs(p60),abs(p20),abs(p31),abs(p42), &
3164 abs(p53),abs(p64),abs(p50),abs(p61),abs(p30), &
3165 abs(p41),abs(p52),abs(p63),abs(p40),abs(p51), &
3166 abs(p62),abs(m02),abs(m12),abs(m22),abs(m32), &
3167 abs(m42),abs(m52),abs(m62))
3168 if(norm.ne.0d0)
then
3175 gacc2 = gerr2aux/norm
3177 if (
present(gerr)) gerr = gerraux
3178 if (
present(gerr2)) gerr2 = gerr2aux
3183 call errout_cll(
'G_cll',
'7-point functions not implemented in DD library',eflag)
3185 write(
nerrout_cll,*)
'G_cll: 7-point functions not implemented in DD library'
3186 write(
nerrout_cll,*)
'G_cll: --> use COLI implementation (mode_cll=1)'
3204 write(
ncheckout_cll,*)
' Further output of Critical Points for G_cll suppressed '
3219 write(
ncpout2_cll,*)
' Further output of Critical Points for G_cll suppressed '
3241 subroutine g_arrays_cll(G,Guv,MomInv,masses2,rmax,Gerr,Gerr2)
3243 integer,
intent(in) :: rmax
3244 double complex,
intent(in) :: MomInv(21), masses2(0:6)
3245 double complex,
intent(out) :: G(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3246 double complex,
intent(out) :: Guv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3247 double precision,
optional,
intent(out) :: Gerr(0:rmax),Gerr2(0:rmax)
3248 double precision :: Gerraux(0:rmax),Gerr2aux(0:rmax)
3250 if (
present(gerr))
then
3251 if (
present(gerr2))
then
3252 call g_main_cll(g,guv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3253 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3254 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3255 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3256 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerr,gerr2=gerr2)
3258 call g_main_cll(g,guv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3259 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3260 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3261 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3262 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerr)
3265 if (
present(gerr2))
then
3266 call g_main_cll(g,guv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3267 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3268 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3269 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3270 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerraux,gerr2=gerr2)
3272 call g_main_cll(g,guv,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3273 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3274 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3275 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3276 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerraux)
3293 subroutine g_list_cll(G,Guv,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3294 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3295 m02,m12,m22,m32,m42,m52,m62,rmax,Gerr,Gerr2)
3297 integer,
intent(in) :: rmax
3298 double complex,
intent(in) :: p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53
3299 double complex,
intent(in) :: p64,p50,p61,p30,p41,p52,p63,p40,p51,p62
3300 double complex,
intent(in) :: m02,m12,m22,m32,m42,m52,m62
3301 double complex,
intent(out) :: G(:),Guv(:)
3302 double precision,
optional,
intent(out) :: Gerr(0:rmax),Gerr2(0:rmax)
3307 call errout_cll(
'G_cll',
'Nmax_cll smaller 7',eflag,.true.)
3309 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 7'
3315 call errout_cll(
'G_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
3318 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
3323 call g_list_checked_cll(g,guv,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3324 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3325 m02,m12,m22,m32,m42,m52,m62,rmax,gerr,gerr2)
3330 subroutine g_list_checked_cll(G,Guv,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3331 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3332 m02,m12,m22,m32,m42,m52,m62,rmax,Gerr,Gerr2)
3334 integer,
intent(in) :: rmax
3335 double complex,
intent(in) :: p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53
3336 double complex,
intent(in) :: p64,p50,p61,p30,p41,p52,p63,p40,p51,p62
3337 double complex,
intent(in) :: m02,m12,m22,m32,m42,m52,m62
3338 double complex,
intent(out) :: G(NCoefs(rmax,7))
3339 double complex,
intent(out) :: Guv(NCoefs(rmax,7))
3340 double precision,
optional,
intent(out) :: Gerr(0:rmax),Gerr2(0:rmax)
3341 double complex :: G_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3342 double complex :: Guv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3343 double precision :: Gerraux(0:rmax),Gerr2aux(0:rmax)
3344 integer :: r,n0,n1,n2,n3,n4,n5,n6,cnt
3346 if (
present(gerr))
then
3347 if (
present(gerr2))
then
3348 call g_main_cll(g_aux,guv_aux,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3349 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3350 m02,m12,m22,m32,m42,m52,m62,rmax,gerr,gerr2=gerr2)
3352 call g_main_cll(g_aux,guv_aux,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3353 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3354 m02,m12,m22,m32,m42,m52,m62,rmax,gerr)
3357 if (
present(gerr2))
then
3358 call g_main_cll(g_aux,guv_aux,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3359 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3360 m02,m12,m22,m32,m42,m52,m62,rmax,gerraux,gerr2=gerr2)
3362 call g_main_cll(g_aux,guv_aux,p10,p21,p32,p43,p54,p65,p60,p20,p31,p42,p53, &
3363 p64,p50,p61,p30,p41,p52,p63,p40,p51,p62, &
3364 m02,m12,m22,m32,m42,m52,m62,rmax,gerraux)
3372 do n2=r-2*n0-n1,0,-1
3373 do n3=r-2*n0-n1-n2,0,-1
3374 do n4=r-2*n0-n1-n2-n3,0,-1
3375 do n5=r-2*n0-n1-n2-n3-n4,0,-1
3376 n6 = r-2*n0-n1-n2-n3-n4-n5
3379 g(cnt) = g_aux(n0,n1,n2,n3,n4,n5,n6)
3380 guv(cnt) = guv_aux(n0,n1,n2,n3,n4,n5,n6)
3403 integer,
intent(in) :: rmax
3404 double complex,
intent(in) :: MomInv(21), masses2(0:6)
3405 double complex,
intent(out) :: G(:),Guv(:)
3406 double precision,
optional,
intent(out) :: Gerr(0:rmax),Gerr2(0:rmax)
3411 call errout_cll(
'G_cll',
'Nmax_cll smaller 7',eflag,.true.)
3413 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 7'
3419 call errout_cll(
'G_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
3422 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
3434 integer,
intent(in) :: rmax
3435 double complex,
intent(in) :: MomInv(21), masses2(0:6)
3436 double complex,
intent(out) :: G(NCoefs(rmax,7))
3437 double complex,
intent(out) :: Guv(NCoefs(rmax,7))
3438 double precision,
optional,
intent(out) :: Gerr(0:rmax),Gerr2(0:rmax)
3439 double complex :: G_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3440 double complex :: Guv_aux(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3441 double precision :: Gerraux(0:rmax),Gerr2aux(0:rmax)
3442 integer :: r,n0,n1,n2,n3,n4,n5,n6,cnt
3444 if (
present(gerr))
then
3445 if (
present(gerr2))
then
3446 call g_main_cll(g_aux,guv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3447 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3448 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3449 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3450 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerr,gerr2=gerr2)
3452 call g_main_cll(g_aux,guv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3453 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3454 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3455 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3456 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerr)
3459 if (
present(gerr))
then
3460 call g_main_cll(g_aux,guv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3461 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3462 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3463 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3464 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerraux,gerr2=gerr2)
3466 call g_main_cll(g_aux,guv_aux,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
3467 mominv(7),mominv(8),mominv(9),mominv(10),mominv(11),mominv(12), &
3468 mominv(13),mominv(14),mominv(15),mominv(16),mominv(17),mominv(18), &
3469 mominv(19),mominv(20),mominv(21),masses2(0),masses2(1), &
3470 masses2(2),masses2(3),masses2(4),masses2(5),masses2(6),rmax,gerraux)
3478 do n2=r-2*n0-n1,0,-1
3479 do n3=r-2*n0-n1-n2,0,-1
3480 do n4=r-2*n0-n1-n2-n3,0,-1
3481 do n5=r-2*n0-n1-n2-n3-n4,0,-1
3482 n6 = r-2*n0-n1-n2-n3-n4-n5
3485 g(cnt) = g_aux(n0,n1,n2,n3,n4,n5,n6)
3486 guv(cnt) = guv_aux(n0,n1,n2,n3,n4,n5,n6)
3507 subroutine tn_main_cll(TN,TNuv,MomInv,masses2,N,rmax,TNerr,id_in,TNerr2)
3509 integer,
intent(in) :: N,rmax
3510 double complex,
intent(in) :: MomInv(:), masses2(0:)
3511 double complex,
intent(out) :: TN(:)
3512 double complex,
intent(out) :: TNuv(:)
3513 integer,
optional,
intent(in) :: id_in
3514 double precision,
optional,
intent(out) :: TNerr(0:),TNerr2(0:)
3519 call errout_cll(
'TN_cll',
'subroutine called with wrong number of arguments for N=1',eflag,.true.)
3525 call errout_cll(
'TN_cll',
'argument N larger than Nmax_cll',eflag,.true.)
3528 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= ',n
3534 call errout_cll(
'TN_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
3537 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
3549 integer,
intent(in) :: N,rmax
3550 double complex,
intent(in) :: MomInv(BinomTable(2,N)), masses2(0:N-1)
3551 double complex,
intent(out) :: TN(NCoefs(rmax,N))
3552 double complex,
intent(out) :: TNuv(NCoefs(rmax,N))
3553 integer,
optional,
intent(in) :: id_in
3554 double precision,
optional,
intent(out) :: TNerr(0:rmax),TNerr2(0:rmax)
3555 double precision :: q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40
3556 double precision :: q51,q30,q41,q52
3557 double complex :: mm02,mm12,mm22,mm32,mm42,mm52
3558 double complex :: TN2(NCoefs(rmax,N)),TN2uv(NCoefs(rmax,N))
3559 double complex :: Adduv(0:rmax/2), Bdduv(0:rmax,0:rmax)
3560 double complex :: Cdduv(0:rmax,0:rmax,0:rmax)
3561 double complex :: Ddduv(0:rmax,0:rmax,0:rmax,0:rmax)
3562 double complex :: Add(0:rmax/2), Bdd(0:rmax,0:rmax)
3563 double complex :: Cdd(0:rmax,0:rmax,0:rmax)
3564 double complex :: Ddd(0:rmax,0:rmax,0:rmax,0:rmax)
3565 double complex :: Edd(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax)
3566 double complex :: Fdd(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
3567 double complex :: elimcminf2
3568 double precision :: TNerraux(0:rmax),TNerr2aux(0:rmax),TNdiff(0:rmax)
3569 double complex :: args(BinomTable(2,N)+N)
3570 integer :: n0,n1,n2,n3,n4,n5,r,i,cnt,rank,errflag
3571 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD)
3572 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
3573 double precision :: TNacc(0:rmax),TNacc2(0:rmax),norm,norm_coli,norm_dd
3574 integer :: accflagDD,errflagDD,rankDD,NDD,id
3575 logical :: mflag,eflag
3584 if (
present(id_in))
then
3592 args(1:binomtable(2,n)) = mominv
3593 args(binomtable(2,n)+1:binomtable(2,n)+n) = masses2(0:n-1)
3594 call setmasterfname_cll(
'TN_cll')
3595 call setmastern_cll(n)
3596 call setmasterr_cll(rmax)
3597 call setmasterargs_cll(binomtable(2,n)+n,args)
3609 call calctn(tn,tnuv,mominv,masses2,n,rmax,id,tnerraux,tnerr2aux)
3611 if (
present(tnerr)) tnerr = tnerraux
3612 if (
present(tnerr2)) tnerr2 = tnerr2aux
3616 do i=ncoefs(r,n)-binomtable(r,r+n-2)+1,ncoefs(r,n)
3617 norm = max(norm,abs(tn(i)))
3620 if (norm.eq.0d0)
then
3621 norm = max(maxval(abs(mominv(1:binomtable(2,n)))), &
3622 maxval(abs(masses2(0:n-1))))
3623 if(norm.ne.0d0)
then
3624 norm=1d0/norm**(n-2)
3629 if (norm.ne.0d0)
then
3630 tnacc = tnerraux/norm
3631 tnacc2 = tnerr2aux/norm
3656 call b_dd(bdd,bdduv,q10,mm02,mm12,rank,id)
3664 tn(cnt) = bdd(n0,n1)
3665 tnuv(cnt) = bdduv(n0,n1)
3684 call c_dd(cdd,cdduv,q10,q21,q20,mm02,mm12,mm22,rank,id)
3693 tn(cnt) = cdd(n0,n1,n2)
3694 tnuv(cnt) = cdduv(n0,n1,n2)
3718 call d_dd(ddd,ddduv,q10,q21,q32,q30,q20,q31, &
3719 mm02,mm12,mm22,mm32,rank,id)
3725 do n2=r-2*n0-n1,0,-1
3729 tn(cnt) = ddd(n0,n1,n2,n3)
3730 tnuv(cnt) = ddduv(n0,n1,n2,n3)
3742 call errout_cll(
'TN_cll',
'rank higher than maximum rank implemented in DD library',eflag)
3744 write(
nerrout_cll,*)
'TN_cll: 5-point function of rank>5 not implemented in DD library'
3766 call e_dd(edd,q10,q21,q32,q43,q40,q20,q31,q42,q30,q41, &
3767 mm02,mm12,mm22,mm32,mm42,rank,id)
3774 do n2=r-2*n0-n1,0,-1
3775 do n3=r-2*n0-n1-n2,0,-1
3776 n4 = r-2*n0-n1-n2-n3
3779 tn(cnt) = edd(n0,n1,n2,n3,n4)
3792 call errout_cll(
'TN_cll',
'rank higher than maximum rank implemented in DD library',eflag)
3794 write(
nerrout_cll,*)
'TN_cll: 6-point function of rank>6 not implemented in DD library'
3822 call f_dd(fdd,q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40, &
3823 q51,q30,q41,q52,mm02,mm12,mm22,mm32,mm42,mm52,rank,id)
3830 do n2=r-2*n0-n1,0,-1
3831 do n3=r-2*n0-n1-n2,0,-1
3832 do n4=r-2*n0-n1-n2-n3,0,-1
3833 n5 = r-2*n0-n1-n2-n3-n4
3836 tn(cnt) = fdd(n0,n1,n2,n3,n4,n5)
3849 call errout_cll(
'TN_cll',
'N-point functions not implemented in DD library for N>=7',eflag)
3851 write(
nerrout_cll,*)
'TN_cll: N-point functions not implemented in DD library for N>=7'
3852 write(
nerrout_cll,*)
'TN_cll: --> use COLI implementation (mode_cll=1)'
3858 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
3860 if (
present(tnerr)) tnerr(0:rmax) = accabsdd(0:rmax)
3861 if (
present(tnerr2)) tnerr2(0:rmax) = accabs2dd(0:rmax)
3865 do i=ncoefs(r,n)-binomtable(r,r+n-2)+1,ncoefs(r,n)
3866 norm = max(norm,abs(tn(i)))
3869 if (norm.eq.0d0)
then
3870 norm = max(maxval(abs(mominv(1:binomtable(2,n)))), &
3871 maxval(abs(masses2(0:n-1))))
3872 if(norm.ne.0d0)
then
3873 norm=1d0/norm**(n-2)
3878 if (norm.ne.0d0)
then
3879 tnacc = accabsdd(0:rmax)/norm
3880 tnacc2 = accabs2dd(0:rmax)/norm
3895 call calctn(tn,tnuv,mominv,masses2,n,rmax,id,tnerraux,tnerr2aux)
3911 call b_dd(bdd,bdduv,q10,mm02,mm12,rank,id)
3912 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
3920 tn2(cnt) = bdd(n0,n1)
3921 tn2uv(cnt) = bdduv(n0,n1)
3941 call c_dd(cdd,cdduv,q10,q21,q20,mm02,mm12,mm22,rank,id)
3942 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
3951 tn2(cnt) = cdd(n0,n1,n2)
3952 tn2uv(cnt) = cdduv(n0,n1,n2)
3977 call d_dd(ddd,ddduv,q10,q21,q32,q30,q20,q31, &
3978 mm02,mm12,mm22,mm32,rank,id)
3979 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
3985 do n2=r-2*n0-n1,0,-1
3989 tn2(cnt) = ddd(n0,n1,n2,n3)
3990 tn2uv(cnt) = ddduv(n0,n1,n2,n3)
4002 call errout_cll(
'TN_cll',
'rank higher than maximum rank implemented in DD library',eflag)
4004 write(
nerrout_cll,*)
'TN_cll: 5-point function of rank>5 not implemented in DD library'
4027 call e_dd(edd,q10,q21,q32,q43,q40,q20,q31,q42,q30,q41, &
4028 mm02,mm12,mm22,mm32,mm42,rank,id)
4029 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
4036 do n2=r-2*n0-n1,0,-1
4037 do n3=r-2*n0-n1-n2,0,-1
4038 n4 = r-2*n0-n1-n2-n3
4041 tn2(cnt) = edd(n0,n1,n2,n3,n4)
4054 call errout_cll(
'TN_cll',
'rank higher than maximum rank implemented in DD library',eflag)
4056 write(
nerrout_cll,*)
'TN_cll: 6-point function of rank>6 not implemented in DD library'
4085 call f_dd(fdd,q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40, &
4086 q51,q30,q41,q52,mm02,mm12,mm22,mm32,mm42,mm52,rank,id)
4087 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
4094 do n2=r-2*n0-n1,0,-1
4095 do n3=r-2*n0-n1-n2,0,-1
4096 do n4=r-2*n0-n1-n2-n3,0,-1
4097 n5 = r-2*n0-n1-n2-n3-n4
4100 tn2(cnt) = fdd(n0,n1,n2,n3,n4,n5)
4113 call errout_cll(
'TN_cll',
'N-point functions not implemented in DD library for N>=7',eflag)
4115 write(
nerrout_cll,*)
'TN_cll: N-point functions not implemented in DD library for N>=7'
4116 write(
nerrout_cll,*)
'TN_cll: --> use COLI implementation (mode_cll=1)'
4122 norm_coli = abs(tn(1))
4123 norm_dd = abs(tn2(1))
4125 do i=ncoefs(r,n)-binomtable(r,r+n-2)+1,ncoefs(r,n)
4126 norm_coli = max(norm_coli,abs(tn(i)))
4127 norm_dd = max(norm_dd,abs(tn2(i)))
4131 if (norm_coli.eq.0d0)
then
4132 norm_coli = max(maxval(abs(mominv(1:binomtable(2,n)))), &
4133 maxval(abs(masses2(0:n-1))))
4134 if(norm_coli.ne.0d0)
then
4135 norm_coli=1d0/norm_coli**(n-2)
4140 if (norm_dd.eq.0d0)
then
4141 norm_dd = max(maxval(abs(mominv(1:binomtable(2,n)))), &
4142 maxval(abs(masses2(0:n-1))))
4143 if(norm_dd.ne.0d0)
then
4144 norm_dd=1d0/norm_dd**(n-2)
4149 norm = min(norm_coli,norm_dd)
4154 if (tnerraux(rmax).lt.accabsdd(rmax))
then
4155 if (
present(tnerr)) tnerr = max(tnerraux,tndiff)
4156 if (
present(tnerr2)) tnerr2 = tnerr2aux
4157 if (norm_coli.ne.0d0)
then
4158 tnacc = max(tnerraux/norm_coli,tndiff/norm)
4159 tnacc2 = tnerr2aux/norm_coli
4168 if (
present(tnerr)) tnerr = max(accabsdd(0:rmax),tndiff)
4169 if (
present(tnerr2)) tnerr2 = accabs2dd(0:rmax)
4170 if (norm_dd.ne.0d0)
then
4171 tnacc = max(accabsdd(0:rmax)/norm_dd,tndiff/norm)
4172 tnacc2 = accabs2dd(0:rmax)/norm_dd
4184 do i=ncoefs(r,n)-binomtable(r,r+n-2)+1,ncoefs(r,n)
4185 norm = max(norm,abs(tn(i)))
4188 if (norm.eq.0d0)
then
4189 norm = max(maxval(abs(mominv(1:binomtable(2,n)))), &
4190 maxval(abs(masses2(0:n-1))))
4191 if(norm.ne.0d0)
then
4192 norm=1d0/norm**(n-2)
4197 if (
present(tnerr)) tnerr = tnerraux
4198 if (
present(tnerr2)) tnerr2 = tnerr2aux
4200 if (norm.ne.0d0)
then
4201 tnacc = tnerraux/norm
4202 tnacc2 = tnerr2aux/norm
4227 write(
ncpout_cll,*)
' Further output of Critical Points for TN_cll suppressed for N =',n
4242 write(
ncpout2_cll,*)
' Further output of Critical Points for TN_cll suppressed for N =',n
4261 subroutine t1_cll(A,Auv,masses2,N,rmax,Aerr,id_in)
4263 integer,
intent(in) :: N,rmax
4264 double complex,
intent(in) :: masses2(0:0)
4265 double complex,
intent(out) :: A(:)
4266 double complex,
intent(out) :: Auv(:)
4267 integer,
optional,
intent(in) :: id_in
4268 double precision,
optional,
intent(out) :: Aerr(0:rmax)
4273 call errout_cll(
'TN_cll',
'subroutine called with inconsistent arguments',eflag)
4278 call errout_cll(
'TN_cll',
'argument N larger than Nmax_cll',eflag,.true.)
4281 write(
nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= ',n
4287 call errout_cll(
'TN_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
4290 write(
nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
4302 integer,
intent(in) :: N,rmax
4303 double complex,
intent(in) :: masses2(0:0)
4304 double complex,
intent(out) :: A(NCoefs(rmax,1))
4305 double complex,
intent(out) :: Auv(NCoefs(rmax,1))
4306 integer,
optional,
intent(in) :: id_in
4307 double precision,
optional,
intent(out) :: Aerr(0:rmax)
4308 double complex :: mm02
4309 double complex :: A2(NCoefs(rmax,1)),A2uv(NCoefs(rmax,1))
4310 double complex :: Adduv(0:rmax/2),Add(0:rmax/2)
4311 double complex :: elimcminf2
4312 double precision :: Aerraux(0:rmax),Aerr2aux(0:rmax),Adiff(0:rmax)
4313 double complex :: args(1),MomInvDummy(0)
4314 integer :: n0,r,i,cnt,rank,errflag
4315 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD)
4316 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
4317 double precision :: Aacc(0:rmax),norm,norm_coli,norm_dd
4318 integer :: accflagDD,errflagDD,rankDD,NDD,id
4319 logical :: mflag,eflag
4328 if (
present(id_in))
then
4336 args(1) = masses2(0)
4337 call setmasterfname_cll(
'TN_cll')
4338 call setmastern_cll(n)
4339 call setmasterr_cll(rmax)
4340 call setmasterargs_cll(1,args)
4352 call calca(a,auv,masses2(0),rmax,aerraux)
4353 if (abs(a(1)).ne.0d0)
then
4354 aacc=aerraux/abs(a(1))
4358 if (
present(aerr)) aerr=aerraux
4372 call a_dd(add,adduv,mm02,rank,id)
4376 auv(n0+1) = adduv(n0)
4379 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
4381 if (
present(aerr)) aerr(0:rmax) = accabsdd(0:rmax)
4383 if (abs(a(1)).ne.0d0)
then
4384 aacc=accabsdd(0:rmax)/abs(a(1))
4397 call calca(a,auv,masses2(0),rmax,aerraux)
4406 call a_dd(add,adduv,mm02,rank,id)
4407 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,id)
4411 a2uv(n0+1) = adduv(n0)
4417 norm_coli = abs(a(1))
4418 if(norm_coli.eq.0d0) norm_coli =
muuv2_cll
4419 norm_dd = abs(a2(1))
4420 if(norm_coli.eq.0d0) norm_dd =
muuv2_cll
4421 norm = min(norm_coli,norm_dd)
4425 if (aerraux(rmax).lt.accabsdd(rmax))
then
4426 if (
present(aerr)) aerr = max(aerraux,adiff)
4427 aacc = max(aerraux/norm_coli,adiff/norm)
4432 if (
present(aerr)) aerr = max(accabsdd(0:rmax),adiff)
4433 aacc = max(accabsdd(0:rmax)/norm_dd,adiff/norm)
4453 write(
ncpout_cll,*)
' Further output of Critical Points for TN_cll suppressed for N =',1
4472 subroutine a0_cll(A0,m02)
4474 double complex,
intent(in) :: m02
4475 double complex,
intent(out) :: A0
4476 double complex :: mm02
4477 double complex :: A2uv(0:0),A2(0:0),A0_coli
4478 double complex :: Auv(0:0),A(0:0)
4479 double precision :: Adiff(0:0)
4480 double complex :: Adduv(0:0)
4481 double complex :: Add(0:0)
4482 double complex :: args(1)
4483 double precision :: norm
4488 call setmasterfname_cll(
'A0_cll')
4489 call setmastern_cll(1)
4490 call setmasterr_cll(0)
4491 call setmasterargs_cll(1,args)
4510 call a_dd(add,adduv,mm02,0,0)
4526 call a_dd(add,adduv,mm02,0,0)
4531 norm=max(abs(a(0)),abs(a2(0)))
4554 double complex,
intent(in) :: p10,m02,m12
4555 double precision :: q10
4556 double complex :: mm02,mm12
4557 double complex,
intent(out) :: B0
4558 double complex :: B2uv(0:0,0:0),B2(0:0,0:0),Bn_coli
4559 double complex :: Buv(0:0,0:0),B(0:0,0:0)
4560 double precision :: Bdiff(0:0)
4561 double complex :: Bdduv(0:0,0:0)
4562 double complex :: Bdd(0:0,0:0)
4563 double complex :: args(3)
4564 double precision :: norm
4571 call setmasterfname_cll(
'B0_cll')
4572 call setmastern_cll(2)
4573 call setmasterr_cll(0)
4574 call setmasterargs_cll(3,args)
4584 b0 = bn_coli(0,p10,m02,m12)
4596 use_cache_system=.false.
4597 call b_dd(bdd,bdduv,q10,mm02,mm12,0,0)
4598 use_cache_system=use_cache_system_save
4611 b0 = bn_coli(0,p10,m02,m12)
4618 use_cache_system=.false.
4619 call b_dd(bdd,bdduv,q10,mm02,mm12,0,0)
4620 use_cache_system=use_cache_system_save
4621 b2uv(0,0) = bdduv(0,0)
4626 norm=max(abs(b(0,0)),abs(b2(0,0)))
4648 double complex,
intent(in) :: MomInv(1), masses2(0:1)
4649 double complex,
intent(out) :: B0
4651 call b0_main_cll(b0,mominv(1),masses2(0),masses2(1))
4664 subroutine c0_main_cll(C0,p10,p21,p20,m02,m12,m22)
4666 double complex,
intent(in) :: p10,p21,p20,m02,m12,m22
4667 double precision :: q10,q21,q20
4668 double complex :: mm02,mm12,mm22
4669 double complex,
intent(out) :: C0
4670 double complex :: C(0:0,0:0,0:0),C2(0:0,0:0,0:0),C0_coli,C0dd
4671 double complex args(6)
4672 double precision :: Cdiff(0:0)
4673 double precision :: norm
4683 call setmasterfname_cll(
'C0_cll')
4684 call setmastern_cll(2)
4685 call setmasterr_cll(0)
4686 call setmasterargs_cll(6,args)
4695 c0 = c0_coli(p10,p21,p20,m02,m12,m22)
4710 c0 = c0dd(q10,q21,q20,mm02,mm12,mm22,0)
4720 c0 = c0_coli(p10,p21,p20,m02,m12,m22)
4731 c2(0,0,0) = c0dd(q10,q21,q20,mm02,mm12,mm22,0)
4735 norm=max(abs(c(0,0,0)),abs(c2(0,0,0)))
4736 call checkcoefsc_cll(c,c2,p10,p21,p20,m02,m12,m22,0,norm,cdiff)
4757 double complex,
intent(in) :: MomInv(3), masses2(0:2)
4758 double complex,
intent(out) :: C0
4760 call c0_main_cll(c0,mominv(1),mominv(2),mominv(3), &
4761 masses2(0),masses2(1),masses2(2))
4775 subroutine d0_main_cll(D0,p10,p21,p32,p30,p20,p31, &
4778 double complex,
intent(in) :: p10,p21,p32,p30,p20,p31,m02,m12,m22,m32
4779 double precision :: q10,q21,q32,q30,q20,q31
4780 double complex :: mm02,mm12,mm22,mm32
4781 double complex,
intent(out) :: D0
4782 double complex :: D2(0:0,0:0,0:0,0:0),D0_coli,D0dd
4783 double complex :: D(0:0,0:0,0:0,0:0)
4784 double complex :: args(10)
4785 double precision :: Ddiff(0:0)
4786 double precision :: norm
4800 call setmasterfname_cll(
'D0_cll')
4801 call setmastern_cll(4)
4802 call setmasterr_cll(0)
4803 call setmasterargs_cll(10,args)
4811 d0 = d0_coli(p10,p21,p32,p30,p20,p31,m02,m12,m22,m32)
4830 d0 = d0dd(q10,q21,q32,q30,q20,q31,mm02,mm12,mm22,mm32,0)
4840 d0 = d0_coli(p10,p21,p32,p30,p20,p31,m02,m12,m22,m32)
4856 d2(0,0,0,0) = d0dd(q10,q21,q32,q30,q20,q31,mm02,mm12,mm22,mm32,0)
4860 norm=max(abs(d(0,0,0,0)),abs(d2(0,0,0,0)))
4862 m02,m12,m22,m32,0,norm,ddiff)
4883 double complex,
intent(in) :: MomInv(6), masses2(0:3)
4884 double complex,
intent(out) :: D0
4886 call d0_main_cll(d0,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5),mominv(6), &
4887 masses2(0),masses2(1),masses2(2),masses2(3))
4903 subroutine e0_main_cll(E0,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
4904 m02,m12,m22,m32,m42,Eerr,Eerr2)
4906 double complex,
intent(in) :: p10,p21,p32,p43,p40,p20,p31,p42,p30,p41
4907 double complex,
intent(in) :: m02,m12,m22,m32,m42
4908 double complex,
intent(out) :: E0
4909 double precision,
optional,
intent(out) :: Eerr(0:0),Eerr2(0:0)
4910 double precision :: Eerraux(0:0),Eerr2aux(0:0),Ediff(0:0)
4911 double precision :: q10,q21,q32,q43,q40,q20,q31,q42,q30,q41
4912 double complex :: mm02,mm12,mm22,mm32,mm42
4913 double complex :: E(0:0,0:0,0:0,0:0,0:0)
4914 double complex :: Euv(0:0,0:0,0:0,0:0,0:0)
4915 double complex :: E2uv(0:0,0:0,0:0,0:0,0:0)
4916 double complex :: E2(0:0,0:0,0:0,0:0,0:0)
4917 double complex :: Edd(0:0,0:0,0:0,0:0,0:0)
4918 double complex :: elimcminf2
4919 double complex :: args(15)
4920 double precision :: norm
4921 integer,
parameter :: rank=0
4939 call setmasterfname_cll(
'E0_cll')
4940 call setmastern_cll(5)
4941 call setmasterr_cll(0)
4942 call setmasterargs_cll(15,args)
4952 if (
present(eerr))
then
4953 if (
present(eerr2))
then
4954 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
4955 m02,m12,m22,m32,m42,rank,0,eerr,eerr2)
4957 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
4958 m02,m12,m22,m32,m42,rank,0,eerr,eerr2aux)
4961 if (
present(eerr2))
then
4962 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
4963 m02,m12,m22,m32,m42,rank,0,eerraux,eerr2)
4965 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
4966 m02,m12,m22,m32,m42,rank,0,eerraux,eerr2aux)
4992 call e_dd(edd,q10,q21,q32,q43,q40,q20,q31,q42,q30,q41, &
4993 mm02,mm12,mm22,mm32,mm42,rank,0)
5003 if (
present(eerr))
then
5004 if (
present(eerr2))
then
5005 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
5006 m02,m12,m22,m32,m42,rank,0,eerr,eerr2)
5008 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
5009 m02,m12,m22,m32,m42,rank,0,eerr,eerr2aux)
5012 if (
present(eerr2))
then
5013 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
5014 m02,m12,m22,m32,m42,rank,0,eerraux,eerr2)
5016 call calce(e,euv,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
5017 m02,m12,m22,m32,m42,rank,0,eerraux,eerr2aux)
5041 call e_dd(edd,q10,q21,q32,q43,q40,q20,q31,q42,q30,q41, &
5042 mm02,mm12,mm22,mm32,mm42,rank,0)
5044 e2(0,0,0,0,0) = edd(0,0,0,0,0)
5047 norm=max(abs(e(0,0,0,0,0)),abs(e2(0,0,0,0,0)))
5050 call checkcoefse_cll(e,e2,p10,p21,p32,p43,p40,p20,p31,p42,p30,p41, &
5051 m02,m12,m22,m32,m42,rank,norm,ediff)
5071 double complex,
intent(in) :: MomInv(10), masses2(0:4)
5072 double complex,
intent(out) :: E0
5074 call e0_main_cll(e0,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
5075 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
5076 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4))
5092 subroutine f0_main_cll(F0,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5093 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,Ferr,Ferr2)
5095 double complex,
intent(in) :: p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40
5096 double complex,
intent(in) :: p51,p30,p41,p52,m02,m12,m22,m32,m42,m52
5097 double complex,
intent(out) :: F0
5098 double precision,
optional,
intent(out) :: Ferr(0:0),Ferr2(0:0)
5099 double precision :: Ferraux(0:0),Ferr2aux(0:0),Fdiff(0:0)
5100 double precision :: q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40
5101 double precision :: q51,q30,q41,q52
5102 double complex :: mm02,mm12,mm22,mm32,mm42,mm52
5103 integer,
parameter :: rmax=0, rank=0
5104 double complex :: F(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
5105 double complex :: Fuv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
5106 double complex :: F2uv(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
5107 double complex :: F2(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
5108 double complex :: Fdd(0:rmax/2,0:rmax,0:rmax,0:rmax,0:rmax,0:rmax)
5109 double complex :: elimcminf2
5110 double complex :: args(21)
5111 double precision :: norm
5135 call setmasterfname_cll(
'F0_cll')
5136 call setmastern_cll(6)
5137 call setmasterr_cll(rmax)
5138 call setmasterargs_cll(21,args)
5148 if (
present(ferr))
then
5149 if (
present(ferr2))
then
5150 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5151 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,0,0,ferr,ferr2)
5153 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5154 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferr,ferr2aux)
5157 if (
present(ferr2))
then
5158 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5159 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferraux,ferr2)
5161 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5162 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferraux,ferr2aux)
5194 call f_dd(fdd,q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40, &
5195 q51,q30,q41,q52,mm02,mm12,mm22,mm32,mm42,mm52,rank,0)
5197 f0 = fdd(0,0,0,0,0,0)
5206 if (
present(ferr))
then
5207 if (
present(ferr2))
then
5208 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5209 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferr,ferr2)
5211 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5212 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferr,ferr2aux)
5215 if (
present(ferr2))
then
5216 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5217 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferraux,ferr2)
5219 call calcf(f,fuv,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5220 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,0,ferraux,ferr2aux)
5248 call f_dd(fdd,q10,q21,q32,q43,q54,q50,q20,q31,q42,q53,q40, &
5249 q51,q30,q41,q52,mm02,mm12,mm22,mm32,mm42,mm52,rank,0)
5250 f2(0,0,0,0,0,0) = fdd(0,0,0,0,0,0)
5252 norm=max(abs(f(0,0,0,0,0,0)),abs(f2(0,0,0,0,0,0)))
5255 call checkcoefsf_cll(f,f2,p10,p21,p32,p43,p54,p50,p20,p31,p42,p53,p40, &
5256 p51,p30,p41,p52,m02,m12,m22,m32,m42,m52,rmax,norm,fdiff)
5275 double complex,
intent(in) :: MomInv(15), masses2(0:5)
5276 double complex,
intent(out) :: F0
5278 call f0_main_cll(f0,mominv(1),mominv(2),mominv(3),mominv(4),mominv(5), &
5279 mominv(6),mominv(7),mominv(8),mominv(9),mominv(10), &
5280 mominv(11),mominv(12),mominv(13),mominv(14),mominv(15), &
5281 masses2(0),masses2(1),masses2(2),masses2(3),masses2(4),masses2(5))
5296 double complex,
intent(in) :: p10,m02,m12
5297 double precision :: q10
5298 double complex :: mm02,mm12
5299 double complex,
intent(out) :: DB0
5300 double complex :: DB0dd, DB1dd
5301 double complex :: DB0_coli
5302 double complex :: args(3)
5303 double complex :: DBdduv(0:0,0:0)
5304 double complex :: DBdd(0:0,0:0)
5311 call setmasterfname_cll(
'DB0_cll')
5312 call setmastern_cll(2)
5313 call setmasterr_cll(0)
5314 call setmasterargs_cll(3,args)
5323 db0 = db0_coli(p10,m02,m12)
5335 use_cache_system=.false.
5336 call db_dd(dbdd,dbdduv,q10,mm02,mm12,0)
5337 use_cache_system=use_cache_system_save
5347 db0 = db0_coli(p10,m02,m12)
5355 use_cache_system=.false.
5356 call db_dd(dbdd,dbdduv,q10,mm02,mm12,0)
5357 use_cache_system=use_cache_system_save
5382 double complex,
intent(in) :: MomInv(1), masses2(0:1)
5383 double complex,
intent(out) :: DB0
5400 double complex,
intent(in) :: p10,m02,m12
5401 double precision :: q10
5402 double complex :: mm02,mm12
5403 double complex,
intent(out) :: DB1
5404 double complex :: DB0dd, DB1dd
5405 double complex :: DB1_coli
5406 double complex :: args(3)
5407 double complex :: DBdduv(0:1,0:1)
5408 double complex :: DBdd(0:1,0:1)
5415 call setmasterfname_cll(
'DB1_cll')
5416 call setmastern_cll(2)
5417 call setmasterr_cll(1)
5418 call setmasterargs_cll(3,args)
5427 db1 = db1_coli(p10,m02,m12)
5439 use_cache_system=.false.
5440 call db_dd(dbdd,dbdduv,q10,mm02,mm12,1)
5441 use_cache_system=use_cache_system_save
5452 db1 = db1_coli(p10,m02,m12)
5459 use_cache_system=.false.
5460 call db_dd(dbdd,dbdduv,q10,mm02,mm12,1)
5461 use_cache_system=use_cache_system_save
5486 double complex,
intent(in) :: MomInv(1), masses2(0:1)
5487 double complex,
intent(out) :: DB1
5504 double complex,
intent(in) :: p10,m02,m12
5505 double precision :: q10
5506 double complex :: mm02,mm12
5507 double complex,
intent(out) :: DB00, DB00uv
5508 double complex :: DB00dd, DB00dduv
5509 double complex :: DB00_coli
5510 double complex :: args(3)
5511 double complex :: DBdduv(0:2,0:2)
5512 double complex :: DBdd(0:2,0:2)
5519 call setmasterfname_cll(
'DB00_cll')
5520 call setmastern_cll(2)
5521 call setmasterr_cll(2)
5522 call setmasterargs_cll(3,args)
5532 db00 = db00_coli(p10,m02,m12)
5544 use_cache_system=.false.
5545 call db_dd(dbdd,dbdduv,q10,mm02,mm12,2)
5546 use_cache_system=use_cache_system_save
5547 db00uv = dbdduv(1,0)
5559 db00 = db00_coli(p10,m02,m12)
5567 use_cache_system=.false.
5568 call db_dd(dbdd,dbdduv,q10,mm02,mm12,2)
5569 use_cache_system=use_cache_system_save
5570 db00dduv = dbdduv(1,0)
5595 double complex,
intent(in) :: MomInv(1), masses2(0:1)
5596 double complex,
intent(out) :: DB00uv,DB00
5598 call db00_main_cll(db00,db00uv,mominv(1),masses2(0),masses2(1))
5613 double complex,
intent(in) :: p10,m02,m12
5614 double precision :: q10,DBerraux(0:2)
5615 double complex :: mm02,mm12
5616 double complex,
intent(out) :: DB11
5617 double complex :: DB11dd
5618 double complex :: args(3)
5619 double complex :: DBcoliuv(0:1,0:1), DBcoli(0:1,0:2)
5620 double complex :: DBdduv(0:2,0:2)
5621 double complex :: DBdd(0:2,0:2)
5628 call setmasterfname_cll(
'DB11_cll')
5629 call setmastern_cll(2)
5630 call setmasterr_cll(2)
5631 call setmasterargs_cll(3,args)
5640 use_cache_system=.false.
5641 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,2,0,dberraux)
5642 use_cache_system=use_cache_system_save
5655 use_cache_system=.false.
5656 call db_dd(dbdd,dbdduv,q10,mm02,mm12,2)
5657 use_cache_system=use_cache_system_save
5667 use_cache_system=.false.
5668 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,2,0,dberraux)
5669 use_cache_system=use_cache_system_save
5677 use_cache_system=.false.
5678 call db_dd(dbdd,dbdduv,q10,mm02,mm12,2)
5679 use_cache_system=use_cache_system_save
5704 double complex,
intent(in) :: MomInv(1), masses2(0:1)
5705 double complex,
intent(out) :: DB11
5720 subroutine db_main_cll(DB,DBuv,p10,m02,m12,rmax,DBerr)
5722 integer,
intent(in) :: rmax
5723 double complex,
intent(in) :: p10,m02,m12
5724 double precision :: q10
5725 double complex :: mm02,mm12
5726 double complex,
intent(out) :: DBuv(0:rmax/2,0:rmax)
5727 double complex,
intent(out) :: DB(0:rmax/2,0:rmax)
5728 double precision,
optional,
intent(out) :: DBerr(0:rmax)
5729 double precision :: DBerraux(0:rmax),DBdiff(0:rmax)
5730 double complex :: DB2uv(0:rmax/2,0:rmax), DB2(0:rmax/2,0:rmax)
5731 double complex :: DBcoliuv(0:rmax/2,0:rmax)
5732 double complex :: DBcoli(0:rmax/2,0:rmax)
5733 double complex :: DB0dd,DB1dd
5734 double complex :: args(3)
5735 double complex :: DBdduv(0:rmax,0:rmax)
5736 double complex :: DBdd(0:rmax,0:rmax)
5737 double precision :: accrelDD(0:rmax_DD),accabsDD(0:rmax_DD)
5738 double precision :: accrel2DD(0:rmax_DD),accabs2DD(0:rmax_DD)
5739 double precision :: DBacc(0:rmax),DBacc2(0:rmax),norm,norm_coli,norm_dd
5740 integer :: accflagDD,errflagDD,NDD,rankDD
5741 integer :: n0,rank,errflag,i0,i1,n
5742 logical :: flag = .true.,eflag
5750 call setmasterfname_cll(
'DB_cll')
5751 call setmastern_cll(2)
5752 call setmasterr_cll(rmax)
5753 call setmasterargs_cll(3,args)
5761 if (
present(dberr))
then
5762 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,rmax,0,dberr)
5764 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,rmax,0,dberraux)
5766 db(0:rmax/2,0:rmax) = dbcoli(0:rmax/2,0:rmax)
5767 dbuv(0:rmax/2,0:rmax) = dbcoliuv(0:rmax/2,0:rmax)
5781 call db_dd(dbdd,dbdduv,q10,mm02,mm12,rank)
5784 db(0:rank/2,0:rank) = dbdd(0:rank/2,0:rank)
5785 dbuv(0:rank/2,0:rank) = dbdduv(0:rank/2,0:rank)
5794 call calcdb(dbcoli,dbcoliuv,p10,m02,m12,rmax,0,dberraux)
5795 db(0:rmax/2,0:rmax) = dbcoli(0:rmax/2,0:rmax)
5796 dbuv(0:rmax/2,0:rmax) = dbcoliuv(0:rmax/2,0:rmax)
5808 call db_dd(dbdd,dbdduv,q10,mm02,mm12,rank)
5811 db2(0:rank/2,0:rank) = dbdd(0:rank/2,0:rank)
5812 db2uv(0:rank/2,0:rank) = dbdduv(0:rank/2,0:rank)
5813 call ddgetacc(accreldd,accabsdd,accrel2dd,accabs2dd,ndd,rankdd,accflagdd,errflagdd,0)
5815 norm_coli = maxval(abs(db(0,0:rmax)))
5816 norm_dd = maxval(abs(db2(0,0:rmax)))
5817 if (norm_coli.eq.0d0)
then
5818 norm_coli = max(abs(p10),abs(m02),abs(m12))
5819 if(norm_coli.ne.0d0)
then
5820 norm_coli=1d0/norm_coli
5825 if (norm_dd.eq.0d0)
then
5826 norm_dd = max(abs(p10),abs(m02),abs(m12))
5827 if(norm_dd.ne.0d0)
then
5833 norm = min(norm_coli,norm_dd)
5838 if (dberraux(rmax).lt.accabsdd(rmax))
then
5839 if (
present(dberr)) dberr = max(dberraux,dbdiff)
5840 dbacc = max(dberraux/norm_coli,dbdiff/norm)
5845 if (
present(dberr)) dberr = max(accabsdd(0:rmax),dbdiff)
5846 dbacc = max(accabsdd(0:rmax)/norm_dd,dbdiff/norm)
5866 write(
ncpout_cll,*)
' Further output of Critical Points for DB_cll suppressed '
5886 integer,
intent(in) :: rmax
5887 double complex,
intent(in) :: MomInv(1), masses2(0:1)
5888 double complex,
intent(out) :: DBuv(0:rmax/2,0:rmax)
5889 double complex,
intent(out) :: DB(0:rmax/2,0:rmax)
5890 double precision,
optional,
intent(out) :: DBerr(0:rmax)
5891 double precision :: DBerraux(0:rmax)
5893 if (
present(dberr))
then
5894 call db_main_cll(db,dbuv,mominv(1),masses2(0),masses2(1),rmax,dberr)
5896 call db_main_cll(db,dbuv,mominv(1),masses2(0),masses2(1),rmax,dberraux)