4 subroutine QCDNUMevolve(x,Q,pdf)
9 real*8 x,Q,Qlam,Q2,Q2fit,alfas0,scale0,alfas
10 real*8 mc,mc2,mb,mb2,mt,mt2,tc,tc2,tb,tb2
11 real*8 singlet,dm,um,dp,up,sp,ub,db,sb,cb,bb,bp,cp,gl,xx
12 real*8 QALFAS,QPDFXQ,XFROMIX
13 real*8 f(-6:6),pdf(-6:6)
14 integer iq0,iqc,iqb,nf,nf0,qnerr,NFLGET,iflag,ix,i,IQFROMQ
16 integer nset,iset,isetlast
18 real*8 xmin,xmax,qmin,qmax,S
19 save iq0,iqc,iqb,nf0,mc2,mb2,tc2,tb2,mt2
20 save nx,xmin,xmax,nq,qmin,qmax,gridname,isetlast
23 ! fix 14.7.2006 to speed up sue of QCDNUM
24 if(iset.ne.isetlast) then
33 pdf(0)=QPDFXQ('GLUON' ,x,Q2,iflag)
34 singlet=QPDFXQ('SINGLET',x,Q2,iflag)
35 dm= QPDFXQ('DM',x,Q2,IFLAG)
36 um= QPDFXQ('UM',x,Q2,IFLAG)
37 dp= QPDFXQ('DP',x,Q2,IFLAG)
38 up= QPDFXQ('UP',x,Q2,IFLAG)
39 sp= QPDFXQ('SP',x,Q2,IFLAG)
40 ub=0.5d0*(up-um+singlet/dble(nf))
41 db=0.5d0*(dp-dm+singlet/dble(nf))
42 sb=0.5d0*(sp+singlet/dble(nf))
45 cp= QPDFXQ('CP',X,Q2,IFLAG)
46 cb=0.5d0*(cp+singlet/dble(nf))
50 bp= QPDFXQ('BP',X,Q2,IFLAG)
51 bb=0.5d0*(bp+singlet/dble(nf))
68 entry QCDNUMalfa(alfas,Q)
74 alfas=QALFAS(Q2,Qlam,nf,iflag)
77 entry QCDNUMread(nset)
80 ! gridname='large.grid'
89 read(1,*) gridname,nx,xmin,xmax,nq,qmin,qmax
94 entry QCDNUMinit(nset,Eorder,Q2fit)
96 call QNISET('ORDER',Eorder+1)
98 call grqdef(nq,qmin,qmax)
100 call getQMassM(nset,4,mc)
102 CALL QNRSET('CMASS',mc)
103 CALL QNRSET('MCALF',mc)
104 call getThresholdM(nset,4,tc)
107 CALL GRQINP(tc2-1.0d-4,1)
108 call getQMassM(nset,5,mb)
110 CALL QNRSET('BMASS',mb)
111 CALL QNRSET('MBALF',mb)
112 call getThresholdM(nset,5,tb)
115 CALL GRQINP(tb2-1.0d-4,1)
116 call getQMassM(nset,6,mt)
118 CALL QNRSET('TMASS',mt)
119 CALL QNRSET('MTALF',mt)
133 CALL QNLSET('W1ANA',.TRUE.)
134 CALL QNLSET('W2NUM',.TRUE.)
135 CALL QNLSET('W2STF',.FALSE.)
136 if (index(gridname,'none').eq.1) then
140 open(unit=2,status='old',file=gridname, &
141 & form='unformatted',err=1)
142 call QNREAD(2,1,qnerr)
145 write(*,*) 'Grid file problem: ',gridname
147 write(*,*) 'Grid file does not exist'
148 write(*,*) 'Calculating and creating grid file'
150 open(unit=2,status='unknown',file=gridname, &
151 & form='unformatted')
155 write(*,*) 'Existing grid file is inconsistent'
157 & write(*,*) 'Defined grid different'
159 & write(*,*) 'Heavy quark weight table different'
161 & write(*,*) 'Charm mass different'
163 & write(*,*) 'Bottom mass different'
170 entry QCDNUMpdf(nset)
171 ! print *,'entering QCDNUMpdf',nset
172 call GetAlfas(nset,alfas0,scale0)
173 ! print *,alfas0,scale0
175 CALL QNRSET('ALFAS',alfas0)
176 CALL QNRSET('ALFQ0',Q2)
179 ! print *,'calling parmPDF',ix
180 call parmPDF(nset,xx,f)
181 ! if(ix.lt.6) print *,nset,xx,f
184 singlet=singlet+f(i)+f(-i)
190 dp=f(1)+f(-1)-singlet/dble(nf0)
191 up=f(2)+f(-2)-singlet/dble(nf0)
192 sp=f(3)+f(-3)-singlet/dble(nf0)
193 ! print *,'calling qpnset sg...',ix,iq0,singlet
194 CALL QNPSET('SINGLET',ix,iq0,singlet)
195 ! print *,'calling qpnset gl...',ix,iq0,gl
196 CALL QNPSET('GLUON',ix,iq0,gl)
197 ! print *,'calling qpnset dm...',ix,iq0,dm
198 CALL QNPSET('DM',ix,iq0,DM)
199 ! print *,'calling qpnset um...',ix,iq0,um
200 CALL QNPSET('UM',ix,iq0,UM)
201 ! print *,'calling qpnset dp...',ix,iq0,dp
202 CALL QNPSET('DP',ix,iq0,DP)
203 ! print *,'calling qpnset up...',ix,iq0,up
204 CALL QNPSET('UP',ix,iq0,UP)
205 ! print *,'calling qpnset sp...',ix,iq0,sp
206 CALL QNPSET('SP',ix,iq0,SP)
208 ! print *,'calling evols...'
209 CALL EVOLSG(iq0,1,nq)
210 ! print *,'calling evols dm...'
211 CALL EVOLNM('DM',iq0,1,nq)
212 ! print *,'calling evols um...'
213 CALL EVOLNM('UM',iq0,1,nq)
214 ! print *,'calling evols dp...',iq0,iqc,iqb,nq
215 CALL EVLSEA('dp',iq0,iqc,iqb,nq)
216 ! print *,'calling evols up...'
217 CALL EVLSEA('up',iq0,iqc,iqb,nq)
218 ! print *,'calling evols sp...'
219 CALL EVLSEA('sp',iq0,iqc,iqb,nq)
221 ! print *,'calling evols - heavy...'
223 !-- Heavy quark evolution
225 CALL EVOLCP('cp',iqc,iqb,nq)
226 CALL EVOLBP('bp',iqb,nq)
229 call save_pdfqcd(iset)
233 subroutine EVLSEA(name,IQ0,IQC,IQB,NQGRI)
237 integer iq0,iqc,iqb,nqgri
238 real*8 f34,f45,f43,f54,factor
239 parameter(f34=1.d0/12.d0,f45=1.d0/20.d0,f43=-1.d0/12.d0, &
244 CAll EVPLUS(name,IQ0,1,IQC)
245 CALL QADDSI(name,IQC,f34)
246 CAll EVPLUS(name,IQC,IQC,IQB)
247 CALL QADDSI(name,IQB,f45)
248 CAll EVPLUS(name,IQB,IQB,NQGRI)
249 else if(IQ0.gt.IQC.and.IQ0.le.IQB)then
250 CAll EVPLUS(name,IQ0,IQC,IQB)
251 CALL QADDSI(name,IQC,f43)
252 CAll EVPLUS(name,IQC,1,IQC)
253 CALL QADDSI(name,IQC,f34)
254 CALL QADDSI(name,IQB,f45)
255 CAll EVPLUS(name,IQB,IQB,NQGRI)
256 else if(IQ0.gt.IQB)then
257 CAll EVPLUS(name,IQ0,IQB,NQGRI)
258 CALL QADDSI(name,IQB,f54)
259 CAll EVPLUS(name,IQB,IQC,IQB)
260 CALL QADDSI(name,IQB,f45)
261 CALL QADDSI(name,IQC,f43)
262 CAll EVPLUS(name,IQC,1,IQC)
263 CALL QADDSI(name,IQC,f34)
269 subroutine EVOLCP(name,IQC,IQB,NQGRI)
273 integer iq0,iqc,iqb,nqgri
275 parameter(f4=-1.d0/4.d0,f45=1.d0/20.d0)
278 ! First set to zero to avoid adding -1/4Singl at each iteration
282 CALL QADDSI(name,IQC,f4)
283 CAll EVPLUS(name,IQC,IQC,IQB)
284 CALL QADDSI(name,IQB,f45)
285 CAll EVPLUS(name,IQB,IQB,NQGRI)
289 subroutine EVOLBP(name,IQB,NQGRI)
295 parameter(f5=-1.d0/5.d0)
298 ! First set to zero to avoid adding -1/5Singl at each iteration
302 CALL QADDSI(name,IQB,f5)
303 CAll EVPLUS(name,IQB,IQB,NQGRI)
307 ! routine to swap in/out the array PDFQCD(MXX,MQ2,0:10) in QCDNUM as req
310 subroutine get_pdfqcd(nset)
312 IMPLICIT DOUBLE PRECISION (A-H,O-Z)
314 include 'parmsetup.inc'
316 PARAMETER ( MXX = 410 )
317 PARAMETER ( MQ2 = 120 )
318 !-- Do not set the following parameter to zero!
319 PARAMETER ( NDFMAX = 20)
322 &ALPHA0, Q0ALFA, ASLAST, QALAST, &
323 &ALFASQ(MQ2), ALFAPQ(MQ2), ALFA2Q(MQ2), &
324 &DELUP(MQ2), DELDN(MQ2), PDFQCD(MXX,MQ2,0:10), &
325 &FNSQCD(MXX,MQ2),DNSQCD(MXX,MQ2), &
326 &FSIQCD(MXX,MQ2),DSIQCD(MXX,MQ2), &
327 &FGLQCD(MXX,MQ2),DGGQCD(MXX,MQ2), &
328 &FSTORE(MXX,MQ2,31:30+NDFMAX),IDFAST(7,30),NDFAST, &
329 &MARKFF(MXX,MQ2),MARKFH(MXX,MQ2),MARKQQ(MQ2), &
330 &ISTFID(31:30+NDFMAX),IPDFID(31:30+NDFMAX),IEALFA(MQ2), &
331 &IQL_LAST(10),IQ0_LAST(10),IQH_LAST(10)
333 real*8 PDFSAV(MXX,MQ2,0:10,nmxset)
339 PDFQCD(i,j,k)=PDFSAV(i,j,k,nset)
346 entry save_pdfqcd(nset)
351 PDFSAV(i,j,k,nset)=PDFQCD(i,j,k)