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
2395 if (6.gt.nmax_cll) then
2396 call seterrflag_cll(-10)
2397 call errout_cll(
'F_cll',
'Nmax_cll smaller 6',eflag,.true.)
2398 write(nerrout_cll,*)
'Nmax_cll =',nmax_cll
2399 write(nerrout_cll,*)
'Reinitialize COLLIER with Nmax_cll >= 6'
2400 call propagateerrflag_cll
2403 if (rmax.gt.rmax_cll) then
2404 call seterrflag_cll(-10)
2405 call errout_cll(
'F_cll',
'argument rmax larger than rmax_cll',eflag,.true.)
2406 write(nerrout_cll,*)
'rmax =',rmax
2407 write(nerrout_cll,*)
'rmax_cll =',rmax_cll
2408 write(nerrout_cll,*)
'Reinitialize COLLIER with rmax_cll >= ',rmax
2409 call propagateerrflag_cll
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)
2449 call settencache_cll(never_tenred_cll)
2453 select case (mode_cll)
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
2483 norm=1d0/muir2_cll**4
2486 if (norm.ne.0d0) then
2488 facc2 = ferr2aux/norm
2494 if (
present(ferr)) ferr = ferraux
2495 if (
present(ferr2)) ferr2 = ferr2aux
2497 if (mflag)
call propagateaccflag_cll(facc,rmax)
2506 call seterrflag_cll(-10)
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'
2515 q10 = dreal(getminf2dd_cll(p10))
2516 q21 = dreal(getminf2dd_cll(p21))
2517 q32 = dreal(getminf2dd_cll(p32))
2518 q43 = dreal(getminf2dd_cll(p43))
2519 q54 = dreal(getminf2dd_cll(p54))
2520 q50 = dreal(getminf2dd_cll(p50))
2521 q20 = dreal(getminf2dd_cll(p20))
2522 q31 = dreal(getminf2dd_cll(p31))
2523 q42 = dreal(getminf2dd_cll(p42))
2524 q53 = dreal(getminf2dd_cll(p53))
2525 q40 = dreal(getminf2dd_cll(p40))
2526 q51 = dreal(getminf2dd_cll(p51))
2527 q30 = dreal(getminf2dd_cll(p30))
2528 q41 = dreal(getminf2dd_cll(p41))
2529 q52 = dreal(getminf2dd_cll(p52))
2530 mm02 = getminf2dd_cll(m02)
2531 mm12 = getminf2dd_cll(m12)
2532 mm22 = getminf2dd_cll(m22)
2533 mm32 = getminf2dd_cll(m32)
2534 mm42 = getminf2dd_cll(m42)
2535 mm52 = getminf2dd_cll(m52)
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
2568 norm=1d0/muir2_cll**4
2571 if (norm.ne.0d0) then
2572 facc = accabsdd(0:rmax)/norm
2573 facc2 = accabs2dd(0:rmax)/norm
2579 if (mflag)
call propagateaccflag_cll(facc,rmax)
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)
2594 call seterrflag_cll(-10)
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'
2603 q10 = dreal(getminf2dd_cll(p10))
2604 q21 = dreal(getminf2dd_cll(p21))
2605 q32 = dreal(getminf2dd_cll(p32))
2606 q43 = dreal(getminf2dd_cll(p43))
2607 q54 = dreal(getminf2dd_cll(p54))
2608 q50 = dreal(getminf2dd_cll(p50))
2609 q20 = dreal(getminf2dd_cll(p20))
2610 q31 = dreal(getminf2dd_cll(p31))
2611 q42 = dreal(getminf2dd_cll(p42))
2612 q53 = dreal(getminf2dd_cll(p53))
2613 q40 = dreal(getminf2dd_cll(p40))
2614 q51 = dreal(getminf2dd_cll(p51))
2615 q30 = dreal(getminf2dd_cll(p30))
2616 q41 = dreal(getminf2dd_cll(p41))
2617 q52 = dreal(getminf2dd_cll(p52))
2618 mm02 = getminf2dd_cll(m02)
2619 mm12 = getminf2dd_cll(m12)
2620 mm22 = getminf2dd_cll(m22)
2621 mm32 = getminf2dd_cll(m32)
2622 mm42 = getminf2dd_cll(m42)
2623 mm52 = getminf2dd_cll(m52)
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
2657 norm_coli=1d0/muir2_cll**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
2668 norm_dd=1d0/muir2_cll**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
2688 if (monitoring) pointscntf_coli = pointscntf_coli + 1
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
2701 if (monitoring) pointscntf_dd = pointscntf_dd + 1
2704 if (mflag)
call propagateaccflag_cll(facc,rmax)
2708 if (mflag)
call propagateerrflag_cll
2710 if (monitoring) then
2711 pointscntf_cll = pointscntf_cll + 1
2713 if(maxval(facc).gt.reqacc_cll) accpointscntf_cll = accpointscntf_cll + 1
2715 if(maxval(facc).gt.critacc_cll) then
2716 critpointscntf_cll = critpointscntf_cll + 1
2717 if ( critpointscntf_cll.le.noutcritpointsmax_cll(6) ) then
2718 call critpointsout_cll(
'F_cll',0,maxval(facc), critpointscntf_cll)
2719 if( critpointscntf_cll.eq.noutcritpointsmax_cll(6)) then
2720 write(ncpout_cll,*)
' Further output of Critical Points for F_cll suppressed '
2727 if(maxval(facc2).gt.reqacc_cll) accpointscntf2_cll = accpointscntf2_cll + 1
2729 if(maxval(facc2).gt.critacc_cll) then
2730 critpointscntf2_cll = critpointscntf2_cll + 1
2731 if ( critpointscntf2_cll.le.noutcritpointsmax_cll(6) ) then
2732 call critpointsout2_cll(
'F_cll',0,maxval(facc2), critpointscntf2_cll)
2733 if( critpointscntf2_cll.eq.noutcritpointsmax_cll(6)) then
2734 write(ncpout2_cll,*)
' Further output of Critical Points for F_cll suppressed '
2735 write(ncpout2_cll,*)