************************************************************************ * * RSLintegralsQED.f: * * This routine evaluates and dumps on the common integrals.h once and * for all for a given number of active flavours nf and for the pair * (alpha,beta) the integral of the sum of Regular and Singular part * plus the local part of all the splitting functions for all the needed * orders in QED (including alphas corrections). * * The index kk runs like that: * * kk = 1 2 3 4 * nspu nsmu nspd nsmd * * 5 6 7 8 * gg ggm gS gD * * 9 10 11 12 * gmg gmgm gmS gmD * * 13 14 15 16 * Sg Sgm SS SD * * 17 18 19 20 * Dg Dgm DS DD * * 21 22 * VV VDV (DVDV = VV, DVV = VDV) * * 23 24 25 * LL gmL Lgm * ************************************************************************ subroutine RSLintegralsQED(nf,nl,beta,alpha) * implicit none * include "../commons/ColorFactors.h" include "../commons/wrap.h" include "../commons/grid.h" include "../commons/integrals.h" include "../commons/LeptEvol.h" include "../commons/ipt.h" ** * Input Variables * integer nf,nl,beta,alpha ** * Internal Variables * integer bound integer nfup,nfdn,nc,nk integer jpt double precision fL double precision PL(0:2),integ(0:2),cp(0:2) double precision X0NSC double precision X1NSC_ASA,X1GAMGAMC_ASA double precision X1GAMGAMC_AA,REM_X1NSC_AA double precision dgauss,a,b,eps(0:2) double precision integrandsQED double precision e2u,e2d,e2sig,de2,etap,etam double precision e4u,e4d,e4sig,de4 double precision ns0L,ns0RS,qg0R,gq0R double precision ns1L,gmgm1L,nsp1RS,nsm1RS,qg1R,gq1R,ggm1R double precision ns2L,gmgm2L,ns2RS,gq2R,ps2R external integrandsQED data eps / 1d-6, 1d-5, 1d-5 / parameter(nc = 3) parameter(e2u = 4d0 / 9d0) parameter(e2d = 1d0 / 9d0) parameter(e4u = 16d0 / 81d0) parameter(e4d = 1d0 / 81d0) * jpt = 0 if(ipt.ge.1) jpt = 2 * * Initialize Integrals * do k=1,14 do wipt=0,jpt SQ(igrid,nf,nl,k,wipt,beta,alpha) = 0d0 enddo enddo * * Adjustment od the bounds of the integrals * if(alpha.lt.beta)then return else bound = alpha-inter_degree(igrid) if(alpha.lt.inter_degree(igrid)) bound = 0 a = max(xg(igrid,beta),xg(igrid,beta)/xg(igrid,alpha+1)) b = min(1d0,xg(igrid,beta)/xg(igrid,bound)) endif * fL = 0d0 if(alpha.eq.beta) fL = 1d0 * * Couplings * if(nf.eq.3)then nfup = 1 nfdn = 2 elseif(nf.eq.4)then nfup = 2 nfdn = 2 elseif(nf.eq.5)then nfup = 2 nfdn = 3 elseif(nf.eq.6)then nfup = 3 nfdn = 3 endif * e2sig = nc * ( nfup * e2u + nfdn * e2d ) de2 = nc * ( nfup * e2u - nfdn * e2d ) if(LeptEvol) e2sig = e2sig + nl * etap = ( e2u + e2d ) / 2d0 etam = ( e2u - e2d ) / 2d0 * * Variables needed for wrapping the integrand functions * walpha = alpha wbeta = beta * * Precompute integrals * wipt = 0 k = 1 ns0RS = dgauss(integrandsQED,a,b,eps(0)) k = 14 qg0R = dgauss(integrandsQED,a,b,eps(0)) k = 11 gq0R = dgauss(integrandsQED,a,b,eps(0)) ns0L = X0NSC(a) * O(alpha_s alpha) contributions if(jpt.ge.1)then wipt = 1 * Local pieces ns1L = X1NSC_ASA() gmgm1L = X1GAMGAMC_ASA() * NS+ up, NS+ down, Quark-Quark, Quark-Delta, Delta-Quark, Delta-Delta k = 1 nsp1RS = dgauss(integrandsQED,a,b,eps(1)) * NS- up, NS- down, Valence-Valence, Valence-D_V k = 3 nsm1RS = dgauss(integrandsQED,a,b,eps(1)) * Quark-Gluon, Delta-Gluon, Quark-Gamma, Delta-Gamma k = 13 qg1R = dgauss(integrandsQED,a,b,eps(1)) * Gluon-Quark, Gluon-Delta, Gamma-Quark, Gamma-Delta k = 7 gq1R = dgauss(integrandsQED,a,b,eps(1)) * Gluon-Gamma, Gamma-Gluon k = 6 ggm1R = dgauss(integrandsQED,a,b,eps(1)) endif * O(alpha^2) contributions if(jpt.ge.2)then e4sig = nc * ( nfup * e4u + nfdn * e4d ) de4 = nc * ( nfup * e4u - nfdn * e4d ) if(LeptEvol) e4sig = e4sig + nl * wipt = 2 * Local pieces ns2L = REM_X1NSC_AA(a) gmgm2L = X1GAMGAMC_AA() * Remainder NS k = 1 ns2RS = dgauss(integrandsQED,a,b,eps(2)) * Remainder Gamma-Quark, Gamma-Delta k = 11 gq2R = dgauss(integrandsQED,a,b,eps(2)) * Pure singlet k = 15 ps2R = dgauss(integrandsQED,a,b,eps(2)) endif * nk = 22 if(LeptEvol) nk = 25 * do k=1,nk * * LO * cp(0) = 0d0 PL(0) = 0d0 integ(0) = 0d0 * NS+ up if(k.eq.1)then cp(0) = e2u PL(0) = ns0L / CF integ(0) = ns0RS * NS+ down elseif(k.eq.2)then cp(0) = e2d PL(0) = ns0L / CF integ(0) = ns0RS * NS- up elseif(k.eq.3)then cp(0) = e2u PL(0) = ns0L / CF integ(0) = ns0RS * NS- down elseif(k.eq.4)then cp(0) = e2d PL(0) = ns0L / CF integ(0) = ns0RS * Gamma-Gamma elseif(k.eq.10)then cp(0) = e2sig PL(0) = - 4d0 / 3d0 integ(0) = 0d0 * Gamma-Quark elseif(k.eq.11)then cp(0) = etap PL(0) = 0d0 integ(0) = gq0R * Gamma-Delta elseif(k.eq.12)then cp(0) = etam PL(0) = 0d0 integ(0) = gq0R * Quark-Gamma elseif(k.eq.14)then cp(0) = 2d0 * e2sig PL(0) = 0d0 integ(0) = qg0R * Quark-Quark elseif(k.eq.15)then cp(0) = etap PL(0) = ns0L / CF integ(0) = ns0RS * Quark-Delta elseif(k.eq.16)then cp(0) = etam PL(0) = ns0L / CF integ(0) = ns0RS * Delta-Gamma elseif(k.eq.18)then cp(0) = 2d0 * de2 PL(0) = 0d0 integ(0) = qg0R * Delta-Quark elseif(k.eq.19)then cp(0) = etam PL(0) = ns0L / CF integ(0) = ns0RS * Delta-Delta elseif(k.eq.20)then cp(0) = etap PL(0) = ns0L / CF integ(0) = ns0RS * Valence-Valence (=D_V-D_V) elseif(k.eq.21)then cp(0) = etap PL(0) = ns0L / CF integ(0) = ns0RS * Valence-D_V (=D_V-Valence) elseif(k.eq.22)then cp(0) = etam PL(0) = ns0L / CF integ(0) = ns0RS * Lepton-Lepton elseif(k.eq.23)then cp(0) = 1d0 PL(0) = ns0L / CF integ(0) = ns0RS * Gamma-Lepton elseif(k.eq.24)then cp(0) = 1d0 PL(0) = 0d0 integ(0) = gq0R * Lepton-Gamma elseif(k.eq.25)then cp(0) = 1d0 PL(0) = 0d0 integ(0) = 2d0 * nl * qg0R endif * * NLO (i.e. O(alpha_s alpha)) * if(jpt.ge.1)then cp(1) = 0d0 PL(1) = 0d0 integ(1) = 0d0 * NS+ up if(k.eq.1)then cp(1) = e2u PL(1) = ns1L integ(1) = nsp1RS * NS+ down elseif(k.eq.2)then cp(1) = e2d PL(1) = ns1L integ(1) = nsp1RS * NS- up elseif(k.eq.3)then cp(1) = e2u PL(1) = ns1L integ(1) = nsm1RS * NS- down elseif(k.eq.4)then cp(1) = e2d PL(1) = ns1L integ(1) = nsm1RS * Gluon-Gluon elseif(k.eq.5)then cp(1) = e2sig PL(1) = gmgm1L * TR / CF integ(1) = 0d0 * Gluon-Gamma elseif(k.eq.6)then cp(1) = e2sig PL(1) = 0d0 integ(1) = ggm1R * Gluon-Quark elseif(k.eq.7)then cp(1) = etap PL(1) = 0d0 integ(1) = gq1R * Gluon-Delta elseif(k.eq.8)then cp(1) = etam PL(1) = 0d0 integ(1) = gq1R * Gamma-Gluon elseif(k.eq.9)then cp(1) = e2sig PL(1) = 0d0 integ(1) = ggm1R * TR / CF * Gamma-Gamma elseif(k.eq.10)then cp(1) = e2sig PL(1) = gmgm1L integ(1) = 0d0 * Gamma-Quark elseif(k.eq.11)then cp(1) = etap PL(1) = 0d0 integ(1) = gq1R * Gamma-Delta elseif(k.eq.12)then cp(1) = etam PL(1) = 0d0 integ(1) = gq1R * Quark-Gluon elseif(k.eq.13)then cp(1) = 2d0 * e2sig PL(1) = 0d0 integ(1) = qg1R * TR / CF * Quark-Gamma elseif(k.eq.14)then cp(1) = 2d0 * e2sig PL(1) = 0d0 integ(1) = qg1R * Quark-Quark elseif(k.eq.15)then cp(1) = etap PL(1) = ns1L integ(1) = nsp1RS * Quark-Delta elseif(k.eq.16)then cp(1) = etam PL(1) = ns1L integ(1) = nsp1RS * Delta-Gluon elseif(k.eq.17)then cp(1) = 2d0 * de2 PL(1) = 0d0 integ(1) = qg1R * TR / CF * Delta-Gamma elseif(k.eq.18)then cp(1) = 2d0 * de2 PL(1) = 0d0 integ(1) = qg1R * Delta-Quark elseif(k.eq.19)then cp(1) = etam PL(1) = ns1L integ(1) = nsp1RS * Delta-Delta elseif(k.eq.20)then cp(1) = etap PL(1) = ns1L integ(1) = nsp1RS * Valence-Valence (=D_V-D_V) elseif(k.eq.21)then cp(1) = etap PL(1) = ns1L integ(1) = nsm1RS * Valence-D_V (=D_V-Valence) elseif(k.eq.22)then cp(1) = etam PL(1) = ns1L integ(1) = nsm1RS endif endif * * NNLO (i.e. O(alpha^2)) * if(jpt.ge.2)then cp(2) = 0d0 PL(2) = 0d0 integ(2) = 0d0 * NS+ up if(k.eq.1)then cp(2) = e4u PL(2) = ns1L / 2d0 / CF + e2sig / e2u * ns2L integ(2) = nsp1RS / 2d0 / CF + e4sig / e2u * ns2RS * NS+ down elseif(k.eq.2)then cp(2) = e4d PL(2) = ns1L / 2d0 / CF + e2sig / e2d * ns2L integ(2) = nsp1RS / 2d0 / CF + e4sig / e2d * ns2RS * NS- up elseif(k.eq.3)then cp(2) = e4u PL(2) = ns1L / 2d0 / CF + e2sig / e2u * ns2L integ(2) = nsm1RS / 2d0 / CF + e4sig / e2u * ns2RS * NS- down elseif(k.eq.4)then cp(2) = e4d PL(2) = ns1L / 2d0 / CF + e2sig / e2d * ns2L integ(2) = nsm1RS / 2d0 / CF + e4sig / e2d * ns2RS * Gamma-Gamma elseif(k.eq.10)then cp(2) = e4sig PL(2) = gmgm1L integ(2) = ggm1R / CF * Gamma-Quark elseif(k.eq.11)then cp(2) = 1d0 PL(2) = 0d0 integ(2) = gq1R / CF * ( e4u + e4d ) / 2d0 1 + e2sig * gq2R * ( e2u + e2d ) / 2d0 * Gamma-Delta elseif(k.eq.12)then cp(2) = 1d0 PL(2) = 0d0 integ(2) = gq1R / CF * ( e4u - e4d ) / 2d0 1 + e2sig * gq2R * ( e2u - e2d ) / 2d0 * Quark-Gamma elseif(k.eq.14)then cp(2) = 2d0 * e4sig PL(2) = 0d0 integ(2) = qg1R / CF * Quark-Quark elseif(k.eq.15)then cp(2) = 1d0 PL(2) = ns1L / 2d0 / CF * ( e4u + e4d ) / 2d0 1 + e2sig * ns2L * ( e2u + e2d ) / 2d0 integ(2) = nsp1RS / 2d0 / CF * ( e4u + e4d ) / 2d0 1 + e2sig * ns2RS * ( e2u + e2d ) / 2d0 2 + etap * e2sig * ps2R * Quark-Delta elseif(k.eq.16)then cp(2) = 1d0 PL(2) = ns1L / 2d0 / CF * ( e4u - e4d ) / 2d0 1 + e2sig * ns2L * ( e2u - e2d ) / 2d0 integ(2) = nsp1RS / 2d0 / CF * ( e4u - e4d ) / 2d0 1 + e2sig * ns2RS * ( e2u - e2d ) / 2d0 2 + etam * e2sig * ps2R * Delta-Gamma elseif(k.eq.18)then cp(2) = 2d0 * de4 PL(2) = 0d0 integ(2) = qg1R / CF * Delta-Quark elseif(k.eq.19)then cp(2) = 1d0 PL(2) = ns1L / 2d0 / CF * ( e4u - e4d ) / 2d0 1 + e2sig * ns2L * ( e2u - e2d ) / 2d0 integ(2) = nsp1RS / 2d0 / CF * ( e4u - e4d ) / 2d0 1 + e2sig * ns2RS * ( e2u - e2d ) / 2d0 2 + etam * de2 * ps2R * Delta-Delta elseif(k.eq.20)then cp(2) = 1d0 PL(2) = ns1L / 2d0 / CF * ( e4u + e4d ) / 2d0 1 + e2sig * ns2L * ( e2u + e2d ) / 2d0 integ(2) = nsp1RS / 2d0 / CF * ( e4u + e4d ) / 2d0 1 + e2sig * ns2RS * ( e2u + e2d ) / 2d0 2 + etap * de2 * ps2R * Valence-Valence (=D_V-D_V) elseif(k.eq.21)then cp(2) = 1d0 PL(2) = ns1L / 2d0 / CF * ( e4u + e4d ) / 2d0 1 + e2sig * ns2L * ( e2u + e2d ) / 2d0 integ(2) = nsm1RS / 2d0 / CF * ( e4u + e4d ) / 2d0 1 + e2sig * ns2RS * ( e2u + e2d ) / 2d0 * Valence-D_V (=D_V-Valence) elseif(k.eq.22)then cp(2) = 1d0 PL(2) = ns1L / 2d0 / CF * ( e4u - e4d ) / 2d0 1 + e2sig * ns2L * ( e2u - e2d ) / 2d0 integ(2) = nsm1RS / 2d0 / CF * ( e4u - e4d ) / 2d0 1 + e2sig * ns2RS * ( e2u - e2d ) / 2d0 endif endif * * Integrals * do wipt=0,jpt SQ(igrid,nf,nl,k,wipt,beta,alpha) = cp(wipt) 1 * ( integ(wipt) + PL(wipt) * fL ) enddo enddo * return end