program testds2000 implicit double precision (a-z) integer SET call ini SET=1 q2=10.d0 do set=1,12 do x=0.001,0.95,0.005 call ds2000(SET,x,q2,uv,dv,ub,db,sb,glu,gp,gn,gd) C Writes x Q^2 Delta U_total Delta D_total write(6,100)x,q2,uv+2*ub,dv+2*db enddo enddo 100 FORMAT (8(1PE12.4)) end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C POLARIZED PARTON DISTRIBUTIONS (NLO and LO) C C FROM HEP-PH/0007068 - PRD62(2000)094025 C C D. de Florian and R. Sassot C C C C The distributions are obtained by calling the subroutine C C C C DS2000(SET,X,Q2,DUV,DDV,DUBAR,DDBAR,DSTR,DGLU,G1P,G1N,G1D) C C C C Where C C SET: 1 SET i+ NLO (MSbar) C C 2 SET i- NLO (MSbar) C C 3 SET ii+ NLO (MSbar) C C 4 SET ii- NLO (MSbar) C C 5 SET iii+ NLO (MSbar) C C 6 SET iii- NLO (MSbar) C C 7 SET i+ LO C C 8 SET i- LO C C 9 SET ii+ LO C C 10 SET ii- LO C C 11 SET iii+ LO C C 12 SET iii- LO C C C C X= x_bjorken C C Q2=Q^2 C C DUV : X * U VALENCE DISTRIBUTION C C DDV : X * D VALENCE DISTRIBUTION C C DUBAR : X * UBAR DISTRIBUTION C C DDBAR : X * DBAR DISTRIBUTION C C DSTR : X * STR= X * STRBAR DISTRIBUTION C C DGLU : X * GLUON DISTRIBUTION C C G1P : X * POLARIZED STRUCTURE FUNCTION (PROTON) C C G1N : X * POLARIZED STRUCTURE FUNCTION (NEUTRON) C C G1D : X * POLARIZED STRUCTURE FUNCTION(DEUTERON) C C C C REMEMBER: ALWAYS X*DISTRIBUTION !!! C C C C BEFORE CALLING THE SUBRUTINE `DS2000` FOR THE FIRST TIME, THE C C SUBROUTINE `INI` MUST BE CALLED (ONLY ONCE!) TO READ THE GRIDS. C C (See the test program above as an example) C C C C RANGE OF VALIDITY OF THE INTERPOLATION: C C 10**(-4)< X < 1.0 C C 1 < Q**2 < 5*10**4 C C C C IN CASE OF PROBLEMS, DOUBTS, ETC, PLEASE REPORT TO C C daniel.deflorian@cern.ch C C sassot@df.uba.ar C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE DS2000(MODE,X,Q2,DUV,DDV,DUBAR,DDBAR, # DSTR,DGLU,G1P,G1N,G1D) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION GU(76,26,12), GD(76,26,12),GUB(76,26,12), # GDB(76,26,12),GS(76,26,12), GG(76,26,12), # XQ(2), GP(76,26,12), GN(76,26,12) COMMON/ GRID / GU,GD,GUB,GDB,GS,GG,GP,GN XQ(1) = DLOG(X) XQ(2) = DLOG(Q2) X3=(1.D0-X)**3.D0 X4=(1.D0-X)**4.D0 X5=X**0.5D0 X6=X**0.6D0 X7=X**0.7D0 DUV = PERINOLA(XQ,GU(1,1,MODE)) * X3* X6 DDV = PERINOLA(XQ,GD(1,1,MODE)) * X4 * X7 DUBAR = PERINOLA(XQ,GUB(1,1,MODE)) * X3 * X5 DDBAR = PERINOLA(XQ,GDB(1,1,MODE)) * X3 * X5 DSTR = PERINOLA(XQ,GS(1,1,MODE)) * X3 * X5 DGLU = PERINOLA(XQ,GG(1,1,MODE)) * X3 * X5 G1P = PERINOLA(XQ,GP(1,1,MODE)) * X3 * X5 G1N = PERINOLA(XQ,GN(1,1,MODE)) * X4 * X5 G1D=(G1P+G1N)*0.5D0*(1.D0-1.5D0*0.058D0) RETURN END FUNCTION PERINOLA(ARG,TABLE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION ARG(2),NENT(2),ENT(102),TABLE(1976) DIMENSION D(8),NCOMB(8),IENT(8) COMMON/ XARRAY / ENT NARG=2 NENT(1)=76 NENT(2)=26 KD=1 M=1 JA=1 DO 5 I=1,NARG NCOMB(I)=1 JB=JA-1+NENT(I) DO 2 J=JA,JB IF (ARG(I).LE.ENT(J)) GO TO 3 2 CONTINUE J=JB 3 IF (J.NE.JA) GO TO 4 J=J+1 4 JR=J-1 D(I)=(ENT(J)-ARG(I))/(ENT(J)-ENT(JR)) IENT(I)=J-JA KD=KD+IENT(I)*M M=M*NENT(I) 5 JA=JB+1 PERINOLA=0.D0 10 FAC=1.D0 IADR=KD IFADR=1 DO 15 I=1,NARG IF (NCOMB(I).EQ.0) GO TO 12 FAC=FAC*(1.D0-D(I)) GO TO 15 12 FAC=FAC*D(I) IADR=IADR-IFADR 15 IFADR=IFADR*NENT(I) PERINOLA=PERINOLA+FAC*TABLE(IADR) IL=NARG 40 IF (NCOMB(IL).EQ.0) GO TO 80 NCOMB(IL)=0 IF (IL.EQ.NARG) GO TO 10 IL=IL+1 DO 50 K=IL,NARG 50 NCOMB(K)=1 GO TO 10 80 IL=IL-1 IF(IL.NE.0) GO TO 40 RETURN END SUBROUTINE INI IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XARRAY(102), GU(76,26,12), GD(76,26,12), # GUB(76,26,12),GDB(76,26,12),GS(76,26,12), GG(76,26,12), # GP(76,26,12), GN(76,26,12) COMMON/ XARRAY / XARRAY COMMON/ GRID / GU,GD,GUB,GDB,GS,GG,GP,GN OPEN(UNIT=80,FILE='i+NLO.GRID',STATUS='OLD') OPEN(UNIT=81,FILE='i-NLO.GRID',STATUS='OLD') OPEN(UNIT=82,FILE='ii+NLO.GRID',STATUS='OLD') OPEN(UNIT=83,FILE='ii-NLO.GRID',STATUS='OLD') OPEN(UNIT=84,FILE='iii+NLO.GRID',STATUS='OLD') OPEN(UNIT=85,FILE='iii-NLO.GRID',STATUS='OLD') OPEN(UNIT=86,FILE='i+LO.GRID',STATUS='OLD') OPEN(UNIT=87,FILE='i-LO.GRID',STATUS='OLD') OPEN(UNIT=88,FILE='ii+LO.GRID',STATUS='OLD') OPEN(UNIT=89,FILE='ii-LO.GRID',STATUS='OLD') OPEN(UNIT=90,FILE='iii+LO.GRID',STATUS='OLD') OPEN(UNIT=91,FILE='iii-LO.GRID',STATUS='OLD') DO IFILE=80,91 DO K = 1, 76 DO J = 1, 26 I=IFILE-79 READ(IFILE,40) GU(K,J,I), GD(K,J,I), GUB(K,J,I), GDB(K,J,I), # GS(K,J,I), GG(K,J,I), GP(K,J,I), GN(K,J,I) END DO END DO CLOSE(IFILE) END DO 40 FORMAT (8(1PE11.4)) DO LX1=0,25,1 XX=10.D0**(-4.D0+LX1/25.D0*3.D0) XARRAY(LX1+1) = DLOG(XX) END DO DO LX1=1,50,1 XX=0.1D0+LX1/50.D0*0.9D0 XARRAY(LX1+26) = DLOG(XX) END DO DO LQ=0,25,1 QQ=0.6D0*10**(5.D0*LQ/25.D0) XARRAY(LQ+77) = DLOG(QQ) END DO RETURN END