]>
Commit | Line | Data |
---|---|---|
ec6e6353 | 1 | ! -*- F90 -*- |
2 | ||
3 | ||
4 | subroutine MRST98evolve(x,Q,pdf) | |
5 | implicit real*8(a-h,o-z) | |
6 | include 'parmsetup.inc' | |
7 | character*16 name(nmxset) | |
8 | integer nmem(nmxset),ndef(nmxset),mmem | |
9 | integer nset | |
10 | common/NAME/name,nmem,ndef,mmem | |
11 | parameter(nx=49,nq=37,ntenth=23,np=8,members=5) | |
12 | double precision gridx(nmxgridx),gridq(nmxgridq) | |
13 | integer ngridx,ngridq,jx,jq | |
14 | real*8 pdf(-6:6) | |
15 | real*8 f(0:members,np,nx,nq+1) | |
16 | real*8 qq(nq),xx(nx),xxin(nx),g(np),n0(np) | |
17 | data xxin/1d-5,2d-5,4d-5,6d-5,8d-5, & | |
18 | & 1d-4,2d-4,4d-4,6d-4,8d-4, & | |
19 | & 1d-3,2d-3,4d-3,6d-3,8d-3, & | |
20 | & 1d-2,1.4d-2,2d-2,3d-2,4d-2,6d-2,8d-2, & | |
21 | & .1d0,.125d0,.15d0,.175d0,.2d0,.225d0,.25d0,.275d0, & | |
22 | & .3d0,.325d0,.35d0,.375d0,.4d0,.425d0,.45d0,.475d0, & | |
23 | & .5d0,.525d0,.55d0,.575d0,.6d0,.65d0,.7d0,.75d0, & | |
24 | & .8d0,.9d0,1d0/ | |
25 | data qq/1.25d0,1.5d0,2d0,2.5d0,3.2d0,4d0,5d0,6.4d0,8d0,1d1, & | |
26 | & 1.2d1,1.8d1,2.6d1,4d1,6.4d1,1d2, & | |
27 | & 1.6d2,2.4d2,4d2,6.4d2,1d3,1.8d3,3.2d3,5.6d3,1d4, & | |
28 | & 1.8d4,3.2d4,5.6d4,1d5,1.8d5,3.2d5,5.6d5,1d6, & | |
29 | & 1.8d6,3.2d6,5.6d6,1d7/ | |
30 | data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/ | |
31 | data n0/3,4,5,9,9,9,9,9/ | |
32 | save | |
33 | ! | |
34 | xsave=x | |
35 | qsq = q*q | |
36 | q2save=qsq | |
37 | ! | |
38 | if(x.lt.xmin) x=xmin | |
39 | if(x.gt.xmax) x=xmax | |
40 | if(qsq.lt.qsqmin) qsq=qsqmin | |
41 | if(qsq.gt.qsqmax) qsq=qsqmax | |
42 | ! | |
43 | xxx=x | |
44 | if(x.lt.xx(ntenth)) xxx=dlog10(x/xx(ntenth))+xx(ntenth) | |
45 | n=0 | |
46 | 70 n=n+1 | |
47 | if(xxx.gt.xx(n+1)) goto 70 | |
48 | a=(xxx-xx(n))/(xx(n+1)-xx(n)) | |
49 | m=0 | |
50 | 80 m=m+1 | |
51 | if(qsq.gt.qq(m+1)) goto 80 | |
52 | b=(qsq-qq(m))/(qq(m+1)-qq(m)) | |
53 | do 60 i=1,np | |
54 | g(i)= (1d0-a)*(1d0-b)*f(imem,i,n,m)+(1d0-a)*b*f(imem,i,n,m+1) & | |
55 | & + a*(1d0-b)*f(imem,i,n+1,m)+a*b*f(imem,i,n+1,m+1) | |
56 | if(n.ge.ntenth) goto 65 | |
57 | if(i.eq.5.or.i.eq.7) goto 65 | |
58 | fac=(1d0-b)*f(imem,i,ntenth,m)+b*f(imem,i,ntenth,m+1) | |
59 | g(i)=fac*10d0**(g(i)-fac) | |
60 | 65 continue | |
61 | g(i)=g(i)*(1d0-x)**n0(i) | |
62 | 60 continue | |
63 | upv=g(1) | |
64 | dnv=g(2) | |
65 | usea=g(4) | |
66 | dsea=g(8) | |
67 | str=g(6) | |
68 | chm=g(5) | |
69 | glu=g(3) | |
70 | bot=g(7) | |
71 | ! | |
72 | pdf(0) = glu | |
73 | pdf(1) = dnv+dsea | |
74 | pdf(-1) = dsea | |
75 | pdf(2) = upv+usea | |
76 | pdf(-2) = usea | |
77 | pdf(3) = str | |
78 | pdf(-3) = str | |
79 | pdf(4) = chm | |
80 | pdf(-4) = chm | |
81 | pdf(5) = bot | |
82 | pdf(-5) = bot | |
83 | pdf(6) = 0.0d0 | |
84 | pdf(-6) = 0.0d0 | |
85 | ||
86 | x=xsave | |
87 | qsq=q2save | |
88 | return | |
89 | ! | |
90 | entry MRST98getgrid(nset,ngridx,ngridq,gridx,gridq) | |
91 | do jx=1,nx | |
92 | gridx(jx)=xx(jx) | |
93 | enddo | |
94 | do jq=1,nq | |
95 | gridq(jq)=qq(jq) | |
96 | enddo | |
97 | ngridx=nx | |
98 | ngridq=nq | |
99 | return | |
100 | ||
101 | entry MRST98read(nset) | |
102 | read(1,*)nmem(nset),ndef(nset) | |
103 | ! - first resotre the xx array | |
104 | do j=1,nx | |
105 | xx(j)=xxin(j) | |
106 | enddo | |
107 | ! - next read in the data points | |
108 | do nm = 0,nmem(nset) | |
109 | do 20 n=1,nx-1 | |
110 | do 20 m=1,nq | |
111 | read(1,50)f(nm,1,n,m),f(nm,2,n,m),f(nm,3,n,m),f(nm,4,n,m), & | |
112 | & f(nm,5,n,m),f(nm,7,n,m),f(nm,6,n,m),f(nm,8,n,m) | |
113 | ! notation: 1=uval 2=val 3=glue 4=usea 5=chm 6=str 7=btm 8=dsea | |
114 | do 25 i=1,np | |
115 | 25 f(nm,i,n,m)=f(nm,i,n,m)/(1d0-xx(n))**n0(i) | |
116 | 20 continue | |
117 | ! write(*,*)'PDF set ',nm,' first element ',f(nm,1,1,1) | |
118 | do 31 j=1,ntenth-1 | |
119 | ! xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth) | |
120 | do 31 i=1,8 | |
121 | if(i.eq.5.or.i.eq.7) goto 31 | |
122 | do 30 k=1,nq | |
123 | 30 f(nm,i,j,k)=dlog10(f(nm,i,j,k)/f(nm,i,ntenth,k)) & | |
124 | & +f(nm,i,ntenth,k) | |
125 | 31 continue | |
126 | 50 format(8f10.5) | |
127 | do 40 i=1,np | |
128 | do 40 m=1,nq | |
129 | 40 f(nm,i,nx,m)=0d0 | |
130 | enddo | |
131 | do 32 j=1,ntenth-1 | |
132 | xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth) | |
133 | 32 continue | |
134 | return | |
135 | ! | |
136 | entry MRST98alfa(alfas,Qalfa) | |
137 | call alphamrs(5,alfas,Qalfa) | |
138 | return | |
139 | ! | |
140 | entry MRST98init(Eorder,Q2fit) | |
141 | return | |
142 | ! | |
143 | entry MRST98pdf(mem) | |
144 | ! if(mem.eq.0) mem=ndef | |
145 | imem = mem | |
146 | ! print *,imem | |
147 | ||
148 | return | |
149 | ! | |
150 | END |