1 subroutine HERAGRIDevolve(xin,qin,pdf)
2 implicit real*8 (a-h,o-z)
3 include 'parmsetup.inc'
4 double precision parm(nopmax)
5 character*16 name(nmxset)
6 integer nmem(nmxset),ndef(nmxset),mmem
7 common/NAME/name,nmem,ndef,mmem
8 double precision gridx(nmxgridx),gridq(nmxgridq)
9 integer ngridx,ngridq,jx,jq
12 integer init,set,i,j,k,l,nset,iset
14 double precision fgrid(0:nhess,161,161,0:7),grid(322)
15 double precision agrid(161),alfas,Qalfa
17 double precision up,dn,usea,dsea,str,chm,bot,glu
18 double precision heragrid
19 double precision qq(5),yntmp(5)
20 real*8 mc,mc2,mb,mb2,mt,mt2,mz,mz2,alfa0,scale0
22 &PI,PROTON,EUTRON,UCLEON,UDSCBT(6),AAM2H,BBM2H,AAM2L,BBM2L, &
23 &AAAR2,BBBR2,FL_FAC,CBMSTF(4:7),CHARGE(4:7), &
24 &C1S3,C2S3,C4S3,C5S3,C8S3,C11S3,C14S3,C16S3,C20S3,C22S3,C28S3, &
25 &C38S3,C40S3,C44S3,C52S3,C136S3,C11S6,C2S9,C4S9,C10S9,C14S9,C16S9, &
26 &C40S9,C44S9,C62S9,C112S9,C182S9,C11S12,C35S18,C61S12,C215S1, &
27 &C29S12,CPI2S3,CPIA,CPIB,CPIC,CPID,CPIE,CPIF,CCA,CCF,CTF,CATF,CFTF
32 up = HERAGRID(x,Q2,grid,1)
33 dn = HERAGRID(x,Q2,grid,2)
34 usea = HERAGRID(x,Q2,grid,3)
35 dsea = HERAGRID(x,Q2,grid,4)
36 if(name(iset)(1:9).eq.'HERAGRID1') then
40 str = HERAGRID(x,Q2,grid,5)
41 chm = HERAGRID(x,Q2,grid,6)
42 bot = HERAGRID(x,Q2,grid,7)
43 glu = HERAGRID(x,Q2,grid,0)
59 entry HERAGRIDgetgrid(nset,ngridx,ngridq,gridx,gridq)
67 gridq(jq)=grid(jq+161)
70 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
71 entry HERAGRIDread(nset)
73 call getnmem(nset,imem)
75 read(1,*)nmem(nset),ndef(nset)
78 read(1,*) (grid(161+(iq-1)*7+ii),ii=1,7)
82 read(1,*) (grid((jx-1)*7+ii),ii=1,7)
85 !read in to alphas grid
87 read(1,*) (agrid((iq-1)*7+ii),ii=1,7)
95 read(1,*)(fgrid(ns,(jx-1)*7+ii,iq,k),ii=1,7)
102 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
103 entry HERAGRIDalfa(alfas,Qalfa)
111 call GetOrderAsM(iset,iord)
113 call listPDF(iset,imem,parm)
115 alfas=A0TOA1(q2,mz2,alfa0,iord,nf,ierr)
119 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
120 entry HERAGRIDinit(Eorder,Q2fit)
125 call getQmassM(iset,4,mc)
126 call getQmassM(iset,5,mb)
127 call getQmassM(iset,6,mt)
140 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
141 entry HERAGRIDpdf(mem)
144 call setnmem(iset,imem)
150 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
151 ! attempt at polynomial (order 4) interpolation based on polint
152 double precision function HERAGRID(x,Q2,grid,n)
153 implicit real*8(a-h,o-z)
154 integer iset,imem,nhess
156 double precision grid(322),x,Q2
157 double precision fgrid(0:nhess,161,161,0:7)
158 double precision ya(5,5),yntmp(5),ymtmp(5)
163 call getnmem(iset,imem)
165 ! find the x bins around x
168 do while (nxhi-nxlow.gt.1)
169 nxmid = (nxlow+nxhi)/2
170 if(x.ge.grid(nxmid)) then
177 ! find the q2 bins around q2
180 do while (nqhi-nqlow.gt.1)
181 nqmid = (nqlow+nqhi)/2
182 if(q2.ge.grid(161+nqmid)) then
189 ! fill the temp 4x4 funtion array (allowing for endpoints and extrapolation)
190 if(nxlow.le.0) nxlow=1
191 if(nxlow.ge.161) nxlow=160
194 elseif(nxlow.eq.2) then
197 if(nxlow.eq.160) then
203 if(nqlow.le.0) nqlow=1
204 if(nqlow.ge.161) nqlow=160
207 elseif(nqlow.eq.2) then
210 if(nqlow.eq.160) then
219 ya(nx,nq) = fgrid(imem,nxlow+nx-nxbot,nqlow+nq-nqbot,n)
227 call herapolint(grid(161+nqlow-nqbot+1),yntmp,npt,q2,ymtmp(j),dy)
229 call herapolint(grid(nxlow-nxbot+1),ymtmp,npt,x,y,dy)
235 !=========================================================
236 SUBROUTINE HERAPOLINT (XA,YA,N,X,Y,DY)
238 IMPLICIT DOUBLE PRECISION (A-H, O-Z)
239 ! Adapted from "Numerical Recipes"
241 DIMENSION XA(N),YA(N),C(NMAX),D(NMAX)
246 IF (DIFT.LT.DIF) THEN
276 !=========================================================