************************************************************************ * * odeintsgUnified.f: * * Set of routines that perform the Adaptive Stepsize Control for * Runge-Kutta integration of an Ordinary Differential Equation. * ************************************************************************ * * First Singolet * ************************************************************************ subroutine odeintsgUnifiedS1(mu21,mu22,ystart,y) * implicit none * include "../commons/PDFEvolution.h" include "../commons/grid.h" include "../commons/odeint1.h" ** * Input Variables * double precision mu21,mu22 double precision ystart(5,5,0:nint_max,0:nint_max) ** * Internal Variables * integer i,j,nstp integer alpha,beta double precision x1,x2 double precision a_QCD double precision h,hdid,hnext,x double precision dydx(5,5,0:nint_max,0:nint_max) double precision yscal(5,5,0:nint_max,0:nint_max) ** * Output Variables * double precision y(5,5,0:nint_max,0:nint_max) * if(PDFEvol.eq."exactmu")then x1 = dlog(mu21) x2 = dlog(mu22) else x1 = a_QCD(mu21) x2 = a_QCD(mu22) endif * x = x1 h = sign(h1,x2-x1) * do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) y(i,j,alpha,beta) = ystart(i,j,alpha,beta) enddo enddo enddo enddo * do nstp=1,maxstp call derivssgUnifiedS1(x,y,dydx) * do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) yscal(i,j,alpha,beta) = dabs(y(i,j,alpha,beta)) 1 + dabs(h*dydx(i,j,alpha,beta)) 2 + tiny enddo enddo enddo enddo * if((x+h-x2)*(x+h-x1).gt.0d0) h = x2 - x * call rkqssgUnifiedS1(y,dydx,x,h,eps,yscal,hdid,hnext) * if((x-x2)*(x2-x1).ge.0d0) return * h = hnext enddo * write(6,*) "In odeintsg.f:" write(6,*) "too many steps!" call exit(-10) * return end * ************************************************************************ subroutine rkqssgUnifiedS1(y,dydx,x,htry,eps,yscal,hdid,hnext) * implicit none * include "../commons/grid.h" include "../commons/odeint2.h" ** * Variables * integer i,j integer alpha,beta double precision eps,hdid,hnext,htry,x double precision dydx(5,5,0:nint_max,0:nint_max) double precision y(5,5,0:nint_max,0:nint_max) double precision yscal(5,5,0:nint_max,0:nint_max) double precision errmax,h,htemp,xnew double precision yerr(5,5,0:nint_max,0:nint_max) double precision ytemp(5,5,0:nint_max,0:nint_max) * h = htry * 101 call rkcksgUnifiedS1(y,dydx,x,h,ytemp,yerr) * errmax = 0d0 do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) errmax = max(errmax,dabs(yerr(i,j,alpha,beta) 1 /yscal(i,j,alpha,beta))) enddo enddo enddo enddo * errmax = errmax / eps * if(errmax.gt.1d0)then htemp = safety * h * (errmax**pshrnk) h = sign(max(dabs(htemp),0.1d0*dabs(h)),h) xnew = x + h if(xnew.eq.x)then write(6,*) "In odeintsg.f:" write(6,*) "stepsize underflow in rkqssg" call exit(-10) endif goto 101 else if(errmax.gt.errcon)then hnext = safety * h * (errmax**pgrow) else hnext = 5d0 * h endif hdid = h x = x + h do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) y(i,j,alpha,beta) = ytemp(i,j,alpha,beta) enddo enddo enddo enddo return endif * end * ************************************************************************ subroutine rkcksgUnifiedS1(y,dydx,x,h,yout,yerr) * implicit none * include "../commons/grid.h" include "../commons/odeint2.h" ** * Variables * integer i,j integer alpha,beta double precision h,x double precision dydx(5,5,0:nint_max,0:nint_max) double precision y(5,5,0:nint_max,0:nint_max) double precision yerr(5,5,0:nint_max,0:nint_max) double precision yout(5,5,0:nint_max,0:nint_max) double precision ytemp(5,5,0:nint_max,0:nint_max) double precision ak2(5,5,0:nint_max,0:nint_max) double precision ak3(5,5,0:nint_max,0:nint_max) double precision ak4(5,5,0:nint_max,0:nint_max) double precision ak5(5,5,0:nint_max,0:nint_max) double precision ak6(5,5,0:nint_max,0:nint_max) * do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + B21 * h * dydx(i,j,alpha,beta) enddo enddo enddo enddo call derivssgUnifiedS1(x+A2*h,ytemp,ak2) do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B31 * dydx(i,j,alpha,beta) 2 + B32 * ak2(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS1(x+A3*h,ytemp,ak3) do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B41 * dydx(i,j,alpha,beta) 2 + B42 * ak2(i,j,alpha,beta) 3 + B43 * ak3(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS1(x+A4*h,ytemp,ak4) do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B51 * dydx(i,j,alpha,beta) 2 + B52 * ak2(i,j,alpha,beta) 3 + B53 * ak3(i,j,alpha,beta) 4 + B54 * ak4(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS1(x+A5*h,ytemp,ak5) do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B61 * dydx(i,j,alpha,beta) 2 + B62 * ak2(i,j,alpha,beta) 3 + B63 * ak3(i,j,alpha,beta) 4 + B64 * ak4(i,j,alpha,beta) 5 + B65 * ak5(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS1(x+A6*h,ytemp,ak6) do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) yout(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( C1 * dydx(i,j,alpha,beta) 2 + C3 * ak3(i,j,alpha,beta) 3 + C4 * ak4(i,j,alpha,beta) 4 + C6 * ak6(i,j,alpha,beta) ) enddo enddo enddo enddo do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=0,nin(igrid) yerr(i,j,alpha,beta) = h *( DC1 * dydx(i,j,alpha,beta) 1 + DC3 * ak3(i,j,alpha,beta) 2 + DC4 * ak4(i,j,alpha,beta) 3 + DC5 * ak5(i,j,alpha,beta) 4 + DC6 * ak6(i,j,alpha,beta) ) enddo enddo enddo enddo * return end * ************************************************************************ subroutine derivssgUnifiedS1(t,M,dMdt) * implicit none * include "../commons/PDFEvolution.h" include "../commons/grid.h" include "../commons/wrap.h" include "../commons/ipt.h" ** * Input Variables * double precision t double precision M(5,5,0:nint_max,0:nint_max) ** * Internal Variables * integer i,j,l integer alpha,beta,delta double precision mu2 double precision integralsQCD double precision integralsQED double precision coupQCD,a_QCD,muR2,bts,fbeta double precision coupQED,a_QED double precision Deltaud double precision integ1(0:nint_max,5,5) double precision integ2(0:nint_max,0:nint_max,5,5) ** * Output Variables * double precision dMdt(5,5,0:nint_max,0:nint_max) * * Couplings * if(PDFEvol.eq."exactmu")then mu2 = dexp(t) coupQCD = a_QCD(mu2) coupQED = a_QED(mu2) bts = 1d0 else mu2 = muR2(t) coupQCD = t coupQED = a_QED(mu2) bts = 1d0 / fbeta(t,wnf,ipt) endif * * Deltaud = ( nf_up - nf_dw ) / nf * Deltaud = 0d0 if(wnf.eq.3.or.wnf.eq.5) Deltaud = - 1d0 / dble(wnf) * if(IsExt(igrid))then do alpha=0,nin(igrid) do beta=alpha,nin(igrid) * QCD integ2(alpha,beta,1,1) = integralsQCD(alpha,beta,coupQCD,7) integ2(alpha,beta,1,2) = 0d0 integ2(alpha,beta,1,3) = integralsQCD(alpha,beta,coupQCD,6) integ2(alpha,beta,1,4) = 0d0 integ2(alpha,beta,1,5) = 0d0 * integ2(alpha,beta,2,1) = 0d0 integ2(alpha,beta,2,2) = 0d0 integ2(alpha,beta,2,3) = 0d0 integ2(alpha,beta,2,4) = 0d0 integ2(alpha,beta,2,5) = 0d0 * integ2(alpha,beta,3,1) = integralsQCD(alpha,beta,coupQCD,5) integ2(alpha,beta,3,2) = 0d0 integ2(alpha,beta,3,3) = integralsQCD(alpha,beta,coupQCD,4) integ2(alpha,beta,3,4) = 0d0 integ2(alpha,beta,3,5) = 0d0 * integ2(alpha,beta,4,1) = Deltaud 1 * integralsQCD(alpha,beta,coupQCD,5) integ2(alpha,beta,4,2) = 0d0 integ2(alpha,beta,4,3) = Deltaud 1 * ( integralsQCD(alpha,beta,coupQCD,4) 2 - integralsQCD(alpha,beta,coupQCD,1) ) integ2(alpha,beta,4,4) = integralsQCD(alpha,beta,coupQCD,1) integ2(alpha,beta,4,5) = 0d0 * integ2(alpha,beta,5,1) = 0d0 integ2(alpha,beta,5,2) = 0d0 integ2(alpha,beta,5,3) = 0d0 integ2(alpha,beta,5,4) = 0d0 integ2(alpha,beta,5,5) = 0d0 * QED integ2(alpha,beta,1,1) = integ2(alpha,beta,1,1) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,5) integ2(alpha,beta,1,2) = integ2(alpha,beta,1,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,6) integ2(alpha,beta,1,3) = integ2(alpha,beta,1,3) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,7) integ2(alpha,beta,1,4) = integ2(alpha,beta,1,4) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,8) * integ2(alpha,beta,2,1) = integ2(alpha,beta,2,1) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,9) integ2(alpha,beta,2,2) = integ2(alpha,beta,2,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,10) integ2(alpha,beta,2,3) = integ2(alpha,beta,2,3) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,11) integ2(alpha,beta,2,4) = integ2(alpha,beta,2,4) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,12) integ2(alpha,beta,2,5) = integ2(alpha,beta,2,5) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,24) * integ2(alpha,beta,3,1) = integ2(alpha,beta,3,1) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,13) integ2(alpha,beta,3,2) = integ2(alpha,beta,3,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,14) integ2(alpha,beta,3,3) = integ2(alpha,beta,3,3) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,15) integ2(alpha,beta,3,4) = integ2(alpha,beta,3,4) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,16) * integ2(alpha,beta,4,1) = integ2(alpha,beta,4,1) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,17) integ2(alpha,beta,4,2) = integ2(alpha,beta,4,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,18) integ2(alpha,beta,4,3) = integ2(alpha,beta,4,3) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,19) integ2(alpha,beta,4,4) = integ2(alpha,beta,4,4) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,20) * integ2(alpha,beta,5,2) = integ2(alpha,beta,5,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,25) integ2(alpha,beta,5,5) = integ2(alpha,beta,5,5) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,23) enddo enddo * * Initialization * do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=alpha,nin(igrid) dMdt(i,j,alpha,beta) = 0d0 do l=1,5 do delta=alpha,beta dMdt(i,j,alpha,beta) = dMdt(i,j,alpha,beta) 1 + integ2(alpha,delta,i,l) 2 * M(l,j,delta,beta) enddo enddo enddo enddo enddo enddo else do alpha=0,nin(igrid) * QCD integ1(alpha,1,1) = integralsQCD(0,alpha,coupQCD,7) integ1(alpha,1,2) = 0d0 integ1(alpha,1,3) = integralsQCD(0,alpha,coupQCD,6) integ1(alpha,1,4) = 0d0 integ1(alpha,1,5) = 0d0 * integ1(alpha,2,1) = 0d0 integ1(alpha,2,2) = 0d0 integ1(alpha,2,3) = 0d0 integ1(alpha,2,4) = 0d0 integ1(alpha,2,5) = 0d0 * integ1(alpha,3,1) = integralsQCD(0,alpha,coupQCD,5) integ1(alpha,3,2) = 0d0 integ1(alpha,3,3) = integralsQCD(0,alpha,coupQCD,4) integ1(alpha,3,4) = 0d0 integ1(alpha,3,5) = 0d0 * integ1(alpha,4,1) = Deltaud 1 * integralsQCD(0,alpha,coupQCD,5) integ1(alpha,4,2) = 0d0 integ1(alpha,4,3) = Deltaud 1 * ( integralsQCD(0,alpha,coupQCD,4) 2 - integralsQCD(0,alpha,coupQCD,1) ) integ1(alpha,4,4) = integralsQCD(0,alpha,coupQCD,1) integ1(alpha,4,5) = 0d0 * integ1(alpha,5,1) = 0d0 integ1(alpha,5,2) = 0d0 integ1(alpha,5,3) = 0d0 integ1(alpha,5,4) = 0d0 integ1(alpha,5,5) = 0d0 * QED integ1(alpha,1,1) = integ1(alpha,1,1) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,5) integ1(alpha,1,2) = integ1(alpha,1,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,6) integ1(alpha,1,3) = integ1(alpha,1,3) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,7) integ1(alpha,1,4) = integ1(alpha,1,4) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,8) * integ1(alpha,2,1) = integ1(alpha,2,1) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,9) integ1(alpha,2,2) = integ1(alpha,2,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,10) integ1(alpha,2,3) = integ1(alpha,2,3) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,11) integ1(alpha,2,4) = integ1(alpha,2,4) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,12) integ1(alpha,2,5) = integ1(alpha,2,5) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,24) * integ1(alpha,3,1) = integ1(alpha,3,1) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,13) integ1(alpha,3,2) = integ1(alpha,3,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,14) integ1(alpha,3,3) = integ1(alpha,3,3) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,15) integ1(alpha,3,4) = integ1(alpha,3,4) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,16) * integ1(alpha,4,1) = integ1(alpha,4,1) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,17) integ1(alpha,4,2) = integ1(alpha,4,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,18) integ1(alpha,4,3) = integ1(alpha,4,3) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,19) integ1(alpha,4,4) = integ1(alpha,4,4) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,20) * integ1(alpha,5,2) = integ1(alpha,5,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,25) integ1(alpha,5,5) = integ1(alpha,5,5) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,23) enddo * * Initialization * do i=1,5 do j=1,5 do alpha=0,nin(igrid) do beta=alpha,nin(igrid) dMdt(i,j,alpha,beta) = 0d0 do l=1,5 do delta=0,nin(igrid)-alpha dMdt(i,j,alpha,beta) = dMdt(i,j,alpha,beta) 1 + integ1(delta,i,l) 2 * M(l,j,alpha+delta,beta) enddo enddo enddo enddo enddo enddo endif * return end * ************************************************************************ * * Second Singolet * ************************************************************************ subroutine odeintsgUnifiedS2(mu21,mu22,ystart,y) * implicit none * include "../commons/PDFEvolution.h" include "../commons/grid.h" include "../commons/odeint1.h" ** * Input Variables * double precision mu21,mu22 double precision ystart(2,2,0:nint_max,0:nint_max) ** * Internal Variables * integer i,j,nstp integer alpha,beta double precision x1,x2 double precision a_QCD double precision h,hdid,hnext,x double precision dydx(2,2,0:nint_max,0:nint_max) double precision yscal(2,2,0:nint_max,0:nint_max) ** * Output Variables * double precision y(2,2,0:nint_max,0:nint_max) * if(PDFEvol.eq."exactmu")then x1 = dlog(mu21) x2 = dlog(mu22) else x1 = a_QCD(mu21) x2 = a_QCD(mu22) endif * x = x1 h = sign(h1,x2-x1) * do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) y(i,j,alpha,beta) = ystart(i,j,alpha,beta) enddo enddo enddo enddo * do nstp=1,maxstp call derivssgUnifiedS2(x,y,dydx) * do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) yscal(i,j,alpha,beta) = dabs(y(i,j,alpha,beta)) 1 + dabs(h*dydx(i,j,alpha,beta)) 2 + tiny enddo enddo enddo enddo * if((x+h-x2)*(x+h-x1).gt.0d0) h = x2 - x * call rkqssgUnifiedS2(y,dydx,x,h,eps,yscal,hdid,hnext) * if((x-x2)*(x2-x1).ge.0d0) return * h = hnext enddo * write(6,*) "In odeintsg.f:" write(6,*) "too many steps!" call exit(-10) * return end * ************************************************************************ subroutine rkqssgUnifiedS2(y,dydx,x,htry,eps,yscal,hdid,hnext) * implicit none * include "../commons/grid.h" include "../commons/odeint2.h" ** * Variables * integer i,j integer alpha,beta double precision eps,hdid,hnext,htry,x double precision dydx(2,2,0:nint_max,0:nint_max) double precision y(2,2,0:nint_max,0:nint_max) double precision yscal(2,2,0:nint_max,0:nint_max) double precision errmax,h,htemp,xnew double precision yerr(2,2,0:nint_max,0:nint_max) double precision ytemp(2,2,0:nint_max,0:nint_max) * h = htry * 101 call rkcksgUnifiedS2(y,dydx,x,h,ytemp,yerr) * errmax = 0d0 do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) errmax = max(errmax,dabs(yerr(i,j,alpha,beta) 1 /yscal(i,j,alpha,beta))) enddo enddo enddo enddo * errmax = errmax / eps * if(errmax.gt.1d0)then htemp = safety * h * (errmax**pshrnk) h = sign(max(dabs(htemp),0.1d0*dabs(h)),h) xnew = x + h if(xnew.eq.x)then write(6,*) "In odeintsg.f:" write(6,*) "stepsize underflow in rkqssg" call exit(-10) endif goto 101 else if(errmax.gt.errcon)then hnext = safety * h * (errmax**pgrow) else hnext = 5d0 * h endif hdid = h x = x + h do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) y(i,j,alpha,beta) = ytemp(i,j,alpha,beta) enddo enddo enddo enddo return endif * end * ************************************************************************ subroutine rkcksgUnifiedS2(y,dydx,x,h,yout,yerr) * implicit none * include "../commons/grid.h" include "../commons/odeint2.h" ** * Variables * integer i,j integer alpha,beta double precision h,x double precision dydx(2,2,0:nint_max,0:nint_max) double precision y(2,2,0:nint_max,0:nint_max) double precision yerr(2,2,0:nint_max,0:nint_max) double precision yout(2,2,0:nint_max,0:nint_max) double precision ytemp(2,2,0:nint_max,0:nint_max) double precision ak2(2,2,0:nint_max,0:nint_max) double precision ak3(2,2,0:nint_max,0:nint_max) double precision ak4(2,2,0:nint_max,0:nint_max) double precision ak5(2,2,0:nint_max,0:nint_max) double precision ak6(2,2,0:nint_max,0:nint_max) * do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + B21 * h * dydx(i,j,alpha,beta) enddo enddo enddo enddo call derivssgUnifiedS2(x+A2*h,ytemp,ak2) do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B31 * dydx(i,j,alpha,beta) 2 + B32 * ak2(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS2(x+A3*h,ytemp,ak3) do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B41 * dydx(i,j,alpha,beta) 2 + B42 * ak2(i,j,alpha,beta) 3 + B43 * ak3(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS2(x+A4*h,ytemp,ak4) do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B51 * dydx(i,j,alpha,beta) 2 + B52 * ak2(i,j,alpha,beta) 3 + B53 * ak3(i,j,alpha,beta) 4 + B54 * ak4(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS2(x+A5*h,ytemp,ak5) do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) ytemp(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( B61 * dydx(i,j,alpha,beta) 2 + B62 * ak2(i,j,alpha,beta) 3 + B63 * ak3(i,j,alpha,beta) 4 + B64 * ak4(i,j,alpha,beta) 5 + B65 * ak5(i,j,alpha,beta) ) enddo enddo enddo enddo call derivssgUnifiedS2(x+A6*h,ytemp,ak6) do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) yout(i,j,alpha,beta) = y(i,j,alpha,beta) 1 + h * ( C1 * dydx(i,j,alpha,beta) 2 + C3 * ak3(i,j,alpha,beta) 3 + C4 * ak4(i,j,alpha,beta) 4 + C6 * ak6(i,j,alpha,beta) ) enddo enddo enddo enddo do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=0,nin(igrid) yerr(i,j,alpha,beta) = h *( DC1 * dydx(i,j,alpha,beta) 1 + DC3 * ak3(i,j,alpha,beta) 2 + DC4 * ak4(i,j,alpha,beta) 3 + DC5 * ak5(i,j,alpha,beta) 4 + DC6 * ak6(i,j,alpha,beta) ) enddo enddo enddo enddo * return end * ************************************************************************ subroutine derivssgUnifiedS2(t,M,dMdt) * implicit none * include "../commons/PDFEvolution.h" include "../commons/grid.h" include "../commons/wrap.h" include "../commons/ipt.h" ** * Input Variables * double precision t double precision M(2,2,0:nint_max,0:nint_max) ** * Internal Variables * integer i,j,l integer alpha,beta,delta double precision mu2 double precision integralsQCD double precision integralsQED double precision coupQCD,a_QCD,muR2,bts,fbeta double precision coupQED,a_QED double precision Deltaud double precision integ1(0:nint_max,2,2) double precision integ2(0:nint_max,0:nint_max,2,2) ** * Output Variables * double precision dMdt(2,2,0:nint_max,0:nint_max) * * Couplings * if(PDFEvol.eq."exactmu")then mu2 = dexp(t) coupQCD = a_QCD(mu2) coupQED = a_QED(mu2) bts = 1d0 else mu2 = muR2(t) coupQCD = t coupQED = a_QED(mu2) bts = 1d0 / fbeta(t,wnf,ipt) endif * * Deltaud = ( nf_up - nf_dw ) / nf * Deltaud = 0d0 if(wnf.eq.3.or.wnf.eq.5) Deltaud = - 1d0 / dble(wnf) * if(IsExt(igrid))then do alpha=0,nin(igrid) do beta=alpha,nin(igrid) * QCD integ2(alpha,beta,1,1) = integralsQCD(alpha,beta,coupQCD,3) integ2(alpha,beta,1,2) = 0d0 * integ2(alpha,beta,2,1) = Deltaud 1 * ( integralsQCD(alpha,beta,coupQCD,3) 2 - integralsQCD(alpha,beta,coupQCD,2) ) integ2(alpha,beta,2,2) = integralsQCD(alpha,beta,coupQCD,2) * QED integ2(alpha,beta,1,1) = integ2(alpha,beta,1,1) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,21) integ2(alpha,beta,1,2) = integ2(alpha,beta,1,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,22) * integ2(alpha,beta,2,1) = integ2(alpha,beta,2,1) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,22) integ2(alpha,beta,2,2) = integ2(alpha,beta,2,2) 1 + bts * integralsQED(alpha,beta,coupQED,coupQCD,21) enddo enddo * * Initialization * do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=alpha,nin(igrid) dMdt(i,j,alpha,beta) = 0d0 do l=1,2 do delta=alpha,beta dMdt(i,j,alpha,beta) = dMdt(i,j,alpha,beta) 1 + integ2(alpha,delta,i,l) 2 * M(l,j,delta,beta) enddo enddo enddo enddo enddo enddo else do alpha=0,nin(igrid) * QCD integ1(alpha,1,1) = integralsQCD(0,alpha,coupQCD,3) integ1(alpha,1,2) = 0d0 * integ1(alpha,2,1) = Deltaud 1 * ( integralsQCD(0,alpha,coupQCD,3) 2 - integralsQCD(0,alpha,coupQCD,2) ) integ1(alpha,2,2) = integralsQCD(0,alpha,coupQCD,2) * QED integ1(alpha,1,1) = integ1(alpha,1,1) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,21) integ1(alpha,1,2) = integ1(alpha,1,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,22) * integ1(alpha,2,1) = integ1(alpha,2,1) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,22) integ1(alpha,2,2) = integ1(alpha,2,2) 1 + bts * integralsQED(0,alpha,coupQED,coupQCD,21) enddo * * Initialization * do i=1,2 do j=1,2 do alpha=0,nin(igrid) do beta=alpha,nin(igrid) dMdt(i,j,alpha,beta) = 0d0 do l=1,2 do delta=0,nin(igrid)-alpha dMdt(i,j,alpha,beta) = dMdt(i,j,alpha,beta) 1 + integ1(delta,i,l) 2 * M(l,j,alpha+delta,beta) enddo enddo enddo enddo enddo enddo endif * return end