~maddevelopers/mg5amcnlo/2.9.4

« back to all changes in this revision

Viewing changes to Template/NLO/Source/PDF/mrs98lo.f

pass to v2.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      subroutine mrs98lo(x,q,mode,upv,dnv,usea,dsea,str,chm,bot,glu)
 
2
C****************************************************************C
 
3
C                                                                C
 
4
C     This is a package for the new MRS LO 1998 parton           C
 
5
C     distributions. The format is similar to the previous       C
 
6
C     (1996) MRS-R series.                                       C
 
7
C                                                                C
 
8
C     As before, x times the parton distribution is returned,    C
 
9
C     q is the scale in GeV,                                     C
 
10
C     and Lambda(MSbar,nf=4) is given below for each set.        C
 
11
C                                                                C
 
12
C     Reference Martin, Roberts, Stirling and Thorne             C
 
13
C     Durham preprint DTP/98/52 (August 1998)                    C
 
14
C                                                                C
 
15
C     TEMPORARY NAMING SCHEME:                                   C
 
16
C                                                                C
 
17
C  mode  set    comment             L(4)/MeV  a_s(M_Z)  grid#1   C
 
18
C  ----  ---    -------             --------  -------   ------   C
 
19
C                                                                C
 
20
C  1     LO05A  central gluon, a_s    174      0.1250   0.01518  C
 
21
C  2     LO09A  higher gluon          174      0.1250   0.01616  C
 
22
C  3     LO10A  lower gluon           174      0.1250   0.01533  C
 
23
C  4     LO01A  lower a_s             136      0.1200   0.01652  C
 
24
C  5     LO07A  higher a_s            216      0.1300   0.01522  C
 
25
C                                                                C
 
26
C                                                                C
 
27
C      The corresponding grid files are called lt05a.dat etc.    C
 
28
C                                                                C
 
29
C      The reference is:                                         C
 
30
C      A.D. Martin, R.G. Roberts, W.J. Stirling, R.S Thorne      C
 
31
C      Univ. Durham preprint DTP/98/??, hep-ph/??????? (1998)    C
 
32
C                                                                C
 
33
C      Comments to : W.J.Stirling@durham.ac.uk                   C
 
34
C                                                                C
 
35
C                                                                C
 
36
C****************************************************************C
 
37
      implicit real*8(a-h,o-z)
 
38
      data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/
 
39
      q2=q*q
 
40
      if(q2.lt.qsqmin.or.q2.gt.qsqmax) print 99
 
41
      if(x.lt.xmin.or.x.gt.xmax)       print 98
 
42
          if(mode.eq.1) then
 
43
        call mrs98lo1(x,q2,upv,dnv,usea,dsea,str,chm,bot,glu) 
 
44
      elseif(mode.eq.2) then
 
45
        call mrs98lo2(x,q2,upv,dnv,usea,dsea,str,chm,bot,glu) 
 
46
      elseif(mode.eq.3) then
 
47
        call mrs98lo3(x,q2,upv,dnv,usea,dsea,str,chm,bot,glu) 
 
48
      elseif(mode.eq.4) then
 
49
        call mrs98lo4(x,q2,upv,dnv,usea,dsea,str,chm,bot,glu) 
 
50
      elseif(mode.eq.5) then
 
51
        call mrs98lo5(x,q2,upv,dnv,usea,dsea,str,chm,bot,glu) 
 
52
      endif 
 
53
  99  format('  WARNING:  Q^2 VALUE IS OUT OF RANGE   ')
 
54
  98  format('  WARNING:   X  VALUE IS OUT OF RANGE   ')
 
55
      return
 
56
      end
 
57
 
 
58
      subroutine mrs98lo1(x,qsq,upv,dnv,usea,dsea,str,chm,bot,glu)
 
59
      implicit real*8(a-h,o-z)
 
60
c-fabio
 
61
      Character Tablefile*40
 
62
      data Tablefile/'lo05a.dat'/
 
63
      integer IU
 
64
      common/IU/IU  !this is set in opendata.f
 
65
c
 
66
      parameter(nx=49,nq=37,ntenth=23,np=8)
 
67
      real*8 f(np,nx,nq+1),qq(nq),xx(nx),g(np),n0(np)
 
68
      data xx/1d-5,2d-5,4d-5,6d-5,8d-5,
 
69
     .        1d-4,2d-4,4d-4,6d-4,8d-4,
 
70
     .        1d-3,2d-3,4d-3,6d-3,8d-3,
 
71
     .        1d-2,1.4d-2,2d-2,3d-2,4d-2,6d-2,8d-2,
 
72
     .     .1d0,.125d0,.15d0,.175d0,.2d0,.225d0,.25d0,.275d0,
 
73
     .     .3d0,.325d0,.35d0,.375d0,.4d0,.425d0,.45d0,.475d0,
 
74
     .     .5d0,.525d0,.55d0,.575d0,.6d0,.65d0,.7d0,.75d0,
 
75
     .     .8d0,.9d0,1d0/
 
76
      data qq/1.25d0,1.5d0,2d0,2.5d0,3.2d0,4d0,5d0,6.4d0,8d0,1d1,
 
77
     .        1.2d1,1.8d1,2.6d1,4d1,6.4d1,1d2,
 
78
     .        1.6d2,2.4d2,4d2,6.4d2,1d3,1.8d3,3.2d3,5.6d3,1d4,
 
79
     .        1.8d4,3.2d4,5.6d4,1d5,1.8d5,3.2d5,5.6d5,1d6,
 
80
     .        1.8d6,3.2d6,5.6d6,1d7/
 
81
      data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/
 
82
      data n0/3,4,5,9,9,9,9,9/
 
83
      data init/0/
 
84
      save
 
85
      xsave=x
 
86
      q2save=qsq
 
87
      if(init.ne.0) goto 10
 
88
c        open(unit=1,file='Pdfdata/lo05a.dat',status='old')
 
89
        call OpenData(Tablefile)
 
90
        do 20 n=1,nx-1
 
91
        do 20 m=1,nq
 
92
        read(IU,50)f(1,n,m),f(2,n,m),f(3,n,m),f(4,n,m),
 
93
     .            f(5,n,m),f(7,n,m),f(6,n,m),f(8,n,m)
 
94
c notation: 1=uval 2=val 3=glue 4=usea 5=chm 6=str 7=btm 8=dsea
 
95
        do 25 i=1,np
 
96
  25     f(i,n,m)=f(i,n,m)/(1d0-xx(n))**n0(i)
 
97
  20  continue
 
98
      do 31 j=1,ntenth-1
 
99
      xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth)
 
100
      do 31 i=1,8
 
101
      if(i.eq.5.or.i.eq.7) goto 31
 
102
      do 30 k=1,nq
 
103
  30  f(i,j,k)=dlog10(f(i,j,k)/f(i,ntenth,k))+f(i,ntenth,k)
 
104
  31  continue
 
105
  50  format(8f10.5)
 
106
      do 40 i=1,np
 
107
      do 40 m=1,nq
 
108
  40  f(i,nx,m)=0d0
 
109
      init=1
 
110
  10  continue
 
111
      if(x.lt.xmin) x=xmin
 
112
      if(x.gt.xmax) x=xmax
 
113
      if(qsq.lt.qsqmin) qsq=qsqmin
 
114
      if(qsq.gt.qsqmax) qsq=qsqmax
 
115
      xxx=x
 
116
      if(x.lt.xx(ntenth)) xxx=dlog10(x/xx(ntenth))+xx(ntenth)
 
117
      n=0
 
118
  70  n=n+1
 
119
      if(xxx.gt.xx(n+1)) goto 70
 
120
      a=(xxx-xx(n))/(xx(n+1)-xx(n))
 
121
      m=0
 
122
  80  m=m+1
 
123
      if(qsq.gt.qq(m+1)) goto 80
 
124
      b=(qsq-qq(m))/(qq(m+1)-qq(m))
 
125
      do 60 i=1,np
 
126
      g(i)= (1d0-a)*(1d0-b)*f(i,n,m)   + (1d0-a)*b*f(i,n,m+1)
 
127
     .    +       a*(1d0-b)*f(i,n+1,m) +       a*b*f(i,n+1,m+1)
 
128
      if(n.ge.ntenth) goto 65
 
129
      if(i.eq.5.or.i.eq.7) goto 65
 
130
          fac=(1d0-b)*f(i,ntenth,m)+b*f(i,ntenth,m+1)
 
131
          g(i)=fac*10d0**(g(i)-fac)
 
132
  65  continue
 
133
      g(i)=g(i)*(1d0-x)**n0(i)
 
134
  60  continue
 
135
      upv=g(1)
 
136
      dnv=g(2)
 
137
      usea=g(4)
 
138
      dsea=g(8)
 
139
      str=g(6)
 
140
      chm=g(5)
 
141
      glu=g(3) 
 
142
      bot=g(7)
 
143
        x=xsave
 
144
        qsq=q2save
 
145
      return
 
146
      end
 
147
      
 
148
      subroutine mrs98lo2(x,qsq,upv,dnv,usea,dsea,str,chm,bot,glu)
 
149
      implicit real*8(a-h,o-z)
 
150
c-fabio
 
151
      Character Tablefile*40
 
152
      data Tablefile/'lo09a.dat'/
 
153
      integer IU
 
154
      common/IU/IU  !this is set in opendata.f
 
155
c
 
156
      parameter(nx=49,nq=37,ntenth=23,np=8)
 
157
      real*8 f(np,nx,nq+1),qq(nq),xx(nx),g(np),n0(np)
 
158
      data xx/1d-5,2d-5,4d-5,6d-5,8d-5,
 
159
     .        1d-4,2d-4,4d-4,6d-4,8d-4,
 
160
     .        1d-3,2d-3,4d-3,6d-3,8d-3,
 
161
     .        1d-2,1.4d-2,2d-2,3d-2,4d-2,6d-2,8d-2,
 
162
     .     .1d0,.125d0,.15d0,.175d0,.2d0,.225d0,.25d0,.275d0,
 
163
     .     .3d0,.325d0,.35d0,.375d0,.4d0,.425d0,.45d0,.475d0,
 
164
     .     .5d0,.525d0,.55d0,.575d0,.6d0,.65d0,.7d0,.75d0,
 
165
     .     .8d0,.9d0,1d0/
 
166
      data qq/1.25d0,1.5d0,2d0,2.5d0,3.2d0,4d0,5d0,6.4d0,8d0,1d1,
 
167
     .        1.2d1,1.8d1,2.6d1,4d1,6.4d1,1d2,
 
168
     .        1.6d2,2.4d2,4d2,6.4d2,1d3,1.8d3,3.2d3,5.6d3,1d4,
 
169
     .        1.8d4,3.2d4,5.6d4,1d5,1.8d5,3.2d5,5.6d5,1d6,
 
170
     .        1.8d6,3.2d6,5.6d6,1d7/
 
171
      data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/
 
172
      data n0/3,4,5,9,9,9,9,9/
 
173
      data init/0/
 
174
      save
 
175
      xsave=x
 
176
      q2save=qsq
 
177
      if(init.ne.0) goto 10
 
178
c        open(unit=1,file='Pdfdata/lo09a.dat',status='old')
 
179
        call OpenData(Tablefile)
 
180
        do 20 n=1,nx-1
 
181
        do 20 m=1,nq
 
182
        read(IU,50)f(1,n,m),f(2,n,m),f(3,n,m),f(4,n,m),
 
183
     .            f(5,n,m),f(7,n,m),f(6,n,m),f(8,n,m)
 
184
c notation: 1=uval 2=val 3=glue 4=usea 5=chm 6=str 7=btm 8=dsea
 
185
        do 25 i=1,np
 
186
  25     f(i,n,m)=f(i,n,m)/(1d0-xx(n))**n0(i)
 
187
  20  continue
 
188
      do 31 j=1,ntenth-1
 
189
      xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth)
 
190
      do 31 i=1,8
 
191
      if(i.eq.5.or.i.eq.7) goto 31
 
192
      do 30 k=1,nq
 
193
  30  f(i,j,k)=dlog10(f(i,j,k)/f(i,ntenth,k))+f(i,ntenth,k)
 
194
  31  continue
 
195
  50  format(8f10.5)
 
196
      do 40 i=1,np
 
197
      do 40 m=1,nq
 
198
  40  f(i,nx,m)=0d0
 
199
      init=1
 
200
  10  continue
 
201
      if(x.lt.xmin) x=xmin
 
202
      if(x.gt.xmax) x=xmax
 
203
      if(qsq.lt.qsqmin) qsq=qsqmin
 
204
      if(qsq.gt.qsqmax) qsq=qsqmax
 
205
      xxx=x
 
206
      if(x.lt.xx(ntenth)) xxx=dlog10(x/xx(ntenth))+xx(ntenth)
 
207
      n=0
 
208
  70  n=n+1
 
209
      if(xxx.gt.xx(n+1)) goto 70
 
210
      a=(xxx-xx(n))/(xx(n+1)-xx(n))
 
211
      m=0
 
212
  80  m=m+1
 
213
      if(qsq.gt.qq(m+1)) goto 80
 
214
      b=(qsq-qq(m))/(qq(m+1)-qq(m))
 
215
      do 60 i=1,np
 
216
      g(i)= (1d0-a)*(1d0-b)*f(i,n,m)   + (1d0-a)*b*f(i,n,m+1)
 
217
     .    +       a*(1d0-b)*f(i,n+1,m) +       a*b*f(i,n+1,m+1)
 
218
      if(n.ge.ntenth) goto 65
 
219
      if(i.eq.5.or.i.eq.7) goto 65
 
220
          fac=(1d0-b)*f(i,ntenth,m)+b*f(i,ntenth,m+1)
 
221
          g(i)=fac*10d0**(g(i)-fac)
 
222
  65  continue
 
223
      g(i)=g(i)*(1d0-x)**n0(i)
 
224
  60  continue
 
225
      upv=g(1)
 
226
      dnv=g(2)
 
227
      usea=g(4)
 
228
      dsea=g(8)
 
229
      str=g(6)
 
230
      chm=g(5)
 
231
      glu=g(3) 
 
232
      bot=g(7)
 
233
        x=xsave
 
234
        qsq=q2save
 
235
      return
 
236
      end
 
237
      
 
238
      subroutine mrs98lo3(x,qsq,upv,dnv,usea,dsea,str,chm,bot,glu)
 
239
      implicit real*8(a-h,o-z)
 
240
c-fabio
 
241
      Character Tablefile*40
 
242
      data Tablefile/'lo10a.dat'/
 
243
      integer IU
 
244
      common/IU/IU  !this is set in opendata.f
 
245
c
 
246
      parameter(nx=49,nq=37,ntenth=23,np=8)
 
247
      real*8 f(np,nx,nq+1),qq(nq),xx(nx),g(np),n0(np)
 
248
      data xx/1d-5,2d-5,4d-5,6d-5,8d-5,
 
249
     .        1d-4,2d-4,4d-4,6d-4,8d-4,
 
250
     .        1d-3,2d-3,4d-3,6d-3,8d-3,
 
251
     .        1d-2,1.4d-2,2d-2,3d-2,4d-2,6d-2,8d-2,
 
252
     .     .1d0,.125d0,.15d0,.175d0,.2d0,.225d0,.25d0,.275d0,
 
253
     .     .3d0,.325d0,.35d0,.375d0,.4d0,.425d0,.45d0,.475d0,
 
254
     .     .5d0,.525d0,.55d0,.575d0,.6d0,.65d0,.7d0,.75d0,
 
255
     .     .8d0,.9d0,1d0/
 
256
      data qq/1.25d0,1.5d0,2d0,2.5d0,3.2d0,4d0,5d0,6.4d0,8d0,1d1,
 
257
     .        1.2d1,1.8d1,2.6d1,4d1,6.4d1,1d2,
 
258
     .        1.6d2,2.4d2,4d2,6.4d2,1d3,1.8d3,3.2d3,5.6d3,1d4,
 
259
     .        1.8d4,3.2d4,5.6d4,1d5,1.8d5,3.2d5,5.6d5,1d6,
 
260
     .        1.8d6,3.2d6,5.6d6,1d7/
 
261
      data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/
 
262
      data n0/3,4,5,9,9,9,9,9/
 
263
      data init/0/
 
264
      save
 
265
      xsave=x
 
266
      q2save=qsq
 
267
      if(init.ne.0) goto 10
 
268
c        open(unit=1,file='Pdfdata/lo10a.dat',status='old')
 
269
        call OpenData(Tablefile)
 
270
        do 20 n=1,nx-1
 
271
        do 20 m=1,nq
 
272
        read(IU,50)f(1,n,m),f(2,n,m),f(3,n,m),f(4,n,m),
 
273
     .            f(5,n,m),f(7,n,m),f(6,n,m),f(8,n,m)
 
274
c notation: 1=uval 2=val 3=glue 4=usea 5=chm 6=str 7=btm 8=dsea
 
275
        do 25 i=1,np
 
276
  25     f(i,n,m)=f(i,n,m)/(1d0-xx(n))**n0(i)
 
277
  20  continue
 
278
      do 31 j=1,ntenth-1
 
279
      xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth)
 
280
      do 31 i=1,8
 
281
      if(i.eq.5.or.i.eq.7) goto 31
 
282
      do 30 k=1,nq
 
283
  30  f(i,j,k)=dlog10(f(i,j,k)/f(i,ntenth,k))+f(i,ntenth,k)
 
284
  31  continue
 
285
  50  format(8f10.5)
 
286
      do 40 i=1,np
 
287
      do 40 m=1,nq
 
288
  40  f(i,nx,m)=0d0
 
289
      init=1
 
290
  10  continue
 
291
      if(x.lt.xmin) x=xmin
 
292
      if(x.gt.xmax) x=xmax
 
293
      if(qsq.lt.qsqmin) qsq=qsqmin
 
294
      if(qsq.gt.qsqmax) qsq=qsqmax
 
295
      xxx=x
 
296
      if(x.lt.xx(ntenth)) xxx=dlog10(x/xx(ntenth))+xx(ntenth)
 
297
      n=0
 
298
  70  n=n+1
 
299
      if(xxx.gt.xx(n+1)) goto 70
 
300
      a=(xxx-xx(n))/(xx(n+1)-xx(n))
 
301
      m=0
 
302
  80  m=m+1
 
303
      if(qsq.gt.qq(m+1)) goto 80
 
304
      b=(qsq-qq(m))/(qq(m+1)-qq(m))
 
305
      do 60 i=1,np
 
306
      g(i)= (1d0-a)*(1d0-b)*f(i,n,m)   + (1d0-a)*b*f(i,n,m+1)
 
307
     .    +       a*(1d0-b)*f(i,n+1,m) +       a*b*f(i,n+1,m+1)
 
308
      if(n.ge.ntenth) goto 65
 
309
      if(i.eq.5.or.i.eq.7) goto 65
 
310
          fac=(1d0-b)*f(i,ntenth,m)+b*f(i,ntenth,m+1)
 
311
          g(i)=fac*10d0**(g(i)-fac)
 
312
  65  continue
 
313
      g(i)=g(i)*(1d0-x)**n0(i)
 
314
  60  continue
 
315
      upv=g(1)
 
316
      dnv=g(2)
 
317
      usea=g(4)
 
318
      dsea=g(8)
 
319
      str=g(6)
 
320
      chm=g(5)
 
321
      glu=g(3) 
 
322
      bot=g(7)
 
323
        x=xsave
 
324
        qsq=q2save
 
325
      return
 
326
      end
 
327
      
 
328
      
 
329
      subroutine mrs98lo4(x,qsq,upv,dnv,usea,dsea,str,chm,bot,glu)
 
330
      implicit real*8(a-h,o-z)
 
331
c-fabio
 
332
      Character Tablefile*40
 
333
      data Tablefile/'lo01a.dat'/
 
334
      integer IU
 
335
      common/IU/IU  !this is set in opendata.f
 
336
c
 
337
      parameter(nx=49,nq=37,ntenth=23,np=8)
 
338
      real*8 f(np,nx,nq+1),qq(nq),xx(nx),g(np),n0(np)
 
339
      data xx/1d-5,2d-5,4d-5,6d-5,8d-5,
 
340
     .        1d-4,2d-4,4d-4,6d-4,8d-4,
 
341
     .        1d-3,2d-3,4d-3,6d-3,8d-3,
 
342
     .        1d-2,1.4d-2,2d-2,3d-2,4d-2,6d-2,8d-2,
 
343
     .     .1d0,.125d0,.15d0,.175d0,.2d0,.225d0,.25d0,.275d0,
 
344
     .     .3d0,.325d0,.35d0,.375d0,.4d0,.425d0,.45d0,.475d0,
 
345
     .     .5d0,.525d0,.55d0,.575d0,.6d0,.65d0,.7d0,.75d0,
 
346
     .     .8d0,.9d0,1d0/
 
347
      data qq/1.25d0,1.5d0,2d0,2.5d0,3.2d0,4d0,5d0,6.4d0,8d0,1d1,
 
348
     .        1.2d1,1.8d1,2.6d1,4d1,6.4d1,1d2,
 
349
     .        1.6d2,2.4d2,4d2,6.4d2,1d3,1.8d3,3.2d3,5.6d3,1d4,
 
350
     .        1.8d4,3.2d4,5.6d4,1d5,1.8d5,3.2d5,5.6d5,1d6,
 
351
     .        1.8d6,3.2d6,5.6d6,1d7/
 
352
      data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/
 
353
      data n0/3,4,5,9,9,9,9,9/
 
354
      data init/0/
 
355
      save
 
356
      xsave=x
 
357
      q2save=qsq
 
358
      if(init.ne.0) goto 10
 
359
c        open(unit=1,file='Pdfdata/lo01a.dat',status='old')
 
360
        call OpenData(Tablefile)
 
361
        do 20 n=1,nx-1
 
362
        do 20 m=1,nq
 
363
        read(IU,50)f(1,n,m),f(2,n,m),f(3,n,m),f(4,n,m),
 
364
     .            f(5,n,m),f(7,n,m),f(6,n,m),f(8,n,m)
 
365
c notation: 1=uval 2=val 3=glue 4=usea 5=chm 6=str 7=btm 8=dsea
 
366
        do 25 i=1,np
 
367
  25     f(i,n,m)=f(i,n,m)/(1d0-xx(n))**n0(i)
 
368
  20  continue
 
369
      do 31 j=1,ntenth-1
 
370
      xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth)
 
371
      do 31 i=1,8
 
372
      if(i.eq.5.or.i.eq.7) goto 31
 
373
      do 30 k=1,nq
 
374
  30  f(i,j,k)=dlog10(f(i,j,k)/f(i,ntenth,k))+f(i,ntenth,k)
 
375
  31  continue
 
376
  50  format(8f10.5)
 
377
      do 40 i=1,np
 
378
      do 40 m=1,nq
 
379
  40  f(i,nx,m)=0d0
 
380
      init=1
 
381
  10  continue
 
382
      if(x.lt.xmin) x=xmin
 
383
      if(x.gt.xmax) x=xmax
 
384
      if(qsq.lt.qsqmin) qsq=qsqmin
 
385
      if(qsq.gt.qsqmax) qsq=qsqmax
 
386
      xxx=x
 
387
      if(x.lt.xx(ntenth)) xxx=dlog10(x/xx(ntenth))+xx(ntenth)
 
388
      n=0
 
389
  70  n=n+1
 
390
      if(xxx.gt.xx(n+1)) goto 70
 
391
      a=(xxx-xx(n))/(xx(n+1)-xx(n))
 
392
      m=0
 
393
  80  m=m+1
 
394
      if(qsq.gt.qq(m+1)) goto 80
 
395
      b=(qsq-qq(m))/(qq(m+1)-qq(m))
 
396
      do 60 i=1,np
 
397
      g(i)= (1d0-a)*(1d0-b)*f(i,n,m)   + (1d0-a)*b*f(i,n,m+1)
 
398
     .    +       a*(1d0-b)*f(i,n+1,m) +       a*b*f(i,n+1,m+1)
 
399
      if(n.ge.ntenth) goto 65
 
400
      if(i.eq.5.or.i.eq.7) goto 65
 
401
          fac=(1d0-b)*f(i,ntenth,m)+b*f(i,ntenth,m+1)
 
402
          g(i)=fac*10d0**(g(i)-fac)
 
403
  65  continue
 
404
      g(i)=g(i)*(1d0-x)**n0(i)
 
405
  60  continue
 
406
      upv=g(1)
 
407
      dnv=g(2)
 
408
      usea=g(4)
 
409
      dsea=g(8)
 
410
      str=g(6)
 
411
      chm=g(5)
 
412
      glu=g(3) 
 
413
      bot=g(7)
 
414
        x=xsave
 
415
        qsq=q2save
 
416
      return
 
417
      end
 
418
      
 
419
      subroutine mrs98lo5(x,qsq,upv,dnv,usea,dsea,str,chm,bot,glu)
 
420
      implicit real*8(a-h,o-z)
 
421
c-fabio
 
422
      Character Tablefile*40
 
423
      data Tablefile/'lo07a.dat'/
 
424
      integer IU
 
425
      common/IU/IU  !this is set in opendata.f
 
426
c
 
427
      parameter(nx=49,nq=37,ntenth=23,np=8)
 
428
      real*8 f(np,nx,nq+1),qq(nq),xx(nx),g(np),n0(np)
 
429
      data xx/1d-5,2d-5,4d-5,6d-5,8d-5,
 
430
     .        1d-4,2d-4,4d-4,6d-4,8d-4,
 
431
     .        1d-3,2d-3,4d-3,6d-3,8d-3,
 
432
     .        1d-2,1.4d-2,2d-2,3d-2,4d-2,6d-2,8d-2,
 
433
     .     .1d0,.125d0,.15d0,.175d0,.2d0,.225d0,.25d0,.275d0,
 
434
     .     .3d0,.325d0,.35d0,.375d0,.4d0,.425d0,.45d0,.475d0,
 
435
     .     .5d0,.525d0,.55d0,.575d0,.6d0,.65d0,.7d0,.75d0,
 
436
     .     .8d0,.9d0,1d0/
 
437
      data qq/1.25d0,1.5d0,2d0,2.5d0,3.2d0,4d0,5d0,6.4d0,8d0,1d1,
 
438
     .        1.2d1,1.8d1,2.6d1,4d1,6.4d1,1d2,
 
439
     .        1.6d2,2.4d2,4d2,6.4d2,1d3,1.8d3,3.2d3,5.6d3,1d4,
 
440
     .        1.8d4,3.2d4,5.6d4,1d5,1.8d5,3.2d5,5.6d5,1d6,
 
441
     .        1.8d6,3.2d6,5.6d6,1d7/
 
442
      data xmin,xmax,qsqmin,qsqmax/1d-5,1d0,1.25d0,1d7/
 
443
      data n0/3,4,5,9,9,9,9,9/
 
444
      data init/0/
 
445
      save
 
446
      xsave=x
 
447
      q2save=qsq
 
448
      if(init.ne.0) goto 10
 
449
c        open(unit=1,file='Pdfdata/lo07a.dat',status='old')
 
450
        call OpenData(Tablefile)
 
451
        do 20 n=1,nx-1
 
452
        do 20 m=1,nq
 
453
        read(IU,50)f(1,n,m),f(2,n,m),f(3,n,m),f(4,n,m),
 
454
     .            f(5,n,m),f(7,n,m),f(6,n,m),f(8,n,m)
 
455
c notation: 1=uval 2=val 3=glue 4=usea 5=chm 6=str 7=btm 8=dsea
 
456
        do 25 i=1,np
 
457
  25     f(i,n,m)=f(i,n,m)/(1d0-xx(n))**n0(i)
 
458
  20  continue
 
459
      do 31 j=1,ntenth-1
 
460
      xx(j)=dlog10(xx(j)/xx(ntenth))+xx(ntenth)
 
461
      do 31 i=1,8
 
462
      if(i.eq.5.or.i.eq.7) goto 31
 
463
      do 30 k=1,nq
 
464
  30  f(i,j,k)=dlog10(f(i,j,k)/f(i,ntenth,k))+f(i,ntenth,k)
 
465
  31  continue
 
466
  50  format(8f10.5)
 
467
      do 40 i=1,np
 
468
      do 40 m=1,nq
 
469
  40  f(i,nx,m)=0d0
 
470
      init=1
 
471
  10  continue
 
472
      if(x.lt.xmin) x=xmin
 
473
      if(x.gt.xmax) x=xmax
 
474
      if(qsq.lt.qsqmin) qsq=qsqmin
 
475
      if(qsq.gt.qsqmax) qsq=qsqmax
 
476
      xxx=x
 
477
      if(x.lt.xx(ntenth)) xxx=dlog10(x/xx(ntenth))+xx(ntenth)
 
478
      n=0
 
479
  70  n=n+1
 
480
      if(xxx.gt.xx(n+1)) goto 70
 
481
      a=(xxx-xx(n))/(xx(n+1)-xx(n))
 
482
      m=0
 
483
  80  m=m+1
 
484
      if(qsq.gt.qq(m+1)) goto 80
 
485
      b=(qsq-qq(m))/(qq(m+1)-qq(m))
 
486
      do 60 i=1,np
 
487
      g(i)= (1d0-a)*(1d0-b)*f(i,n,m)   + (1d0-a)*b*f(i,n,m+1)
 
488
     .    +       a*(1d0-b)*f(i,n+1,m) +       a*b*f(i,n+1,m+1)
 
489
      if(n.ge.ntenth) goto 65
 
490
      if(i.eq.5.or.i.eq.7) goto 65
 
491
          fac=(1d0-b)*f(i,ntenth,m)+b*f(i,ntenth,m+1)
 
492
          g(i)=fac*10d0**(g(i)-fac)
 
493
  65  continue
 
494
      g(i)=g(i)*(1d0-x)**n0(i)
 
495
  60  continue
 
496
      upv=g(1)
 
497
      dnv=g(2)
 
498
      usea=g(4)
 
499
      dsea=g(8)
 
500
      str=g(6)
 
501
      chm=g(5)
 
502
      glu=g(3) 
 
503
      bot=g(7)
 
504
        x=xsave
 
505
        qsq=q2save
 
506
      return
 
507
      end
 
508