gradr_d0.f Source File


Source Code

      SUBROUTINE GRADR(NSPIN,IST1,MESH,DX,DRDI,DRDI2,RO,ZTA,DRR,DDRR,
     +                 DRRU,DDRRU,ROU,IRMD)
C.....-----------------------------------------------------------------
C     evaluates d(ro)/dr,d{d(ro)/dr}/dr.
C     drr=d(ro)/dr, ddrr=d(drr)/dr.
C     coded by T.Asada. Feb.1994.
C.....-----------------------------------------------------------------
C.....-----------------------------------------------------------------
c.....------------------------------------------------------------------
C     .. Scalar Arguments ..
      DOUBLE PRECISION DX
      INTEGER IRMD,IST1,MESH,NSPIN
C     ..
C     .. Array Arguments ..
      DOUBLE PRECISION DDRR(IRMD),DDRRU(IRMD),DRDI(IRMD),DRDI2(IRMD),
     +                 DRR(IRMD),DRRU(IRMD),RO(IRMD),ROU(IRMD),ZTA(IRMD)
C     ..
C     .. Local Scalars ..
      DOUBLE PRECISION D,DRX,DRX0,DRX1,DRX2,DRX3,DRXU,DRXU0,DRXU1,DRXU2,
     +                 DRXU3,DRXX,DRXX0,DRXX1,DRXX2,DRXX3,DRXXU,DRXXU0,
     +                 DRXXU1,DRXXU2,DRXXU3,F0,F1,F2,F3,F4,F5,G1,G2,G3,
     +                 G4,G5,XLF
      INTEGER I,I1,I2,I3,I4,I5,I6,IBH,ICA,ICG,IEX,IGD,IGH,IGL,IHB,IMJ,
     +        IP9,IPG,IPW,IST,IVG,IVN,IWR,IXLF,J,NDVPT,NRED
C     ..
C     .. Statement Functions ..
      DOUBLE PRECISION F131,F132,F133,F141,F142,F143,F144,F151,F152,
     +                 F153,F154,F155,F161,F162,F163,F164,F165,F166,
     +                 F231,F232,F233,F241,F242,F243,F244,F251,F252,
     +                 F253,F254,F255,F261,F262,F263,F264,F265,F266
C     ..
C     .. Intrinsic Functions ..
      INTRINSIC DBLE
C     ..
C     .. Save statement ..
      SAVE NDVPT,IGL,IGH,IMJ,IBH,ICA,ICG,IVN,IPW,IPG,IVG,IP9,IGD,IXLF,
     +     IEX,XLF,IWR
C     ..
C     .. Data statements ..
c.....-----------------------------------------------------------------
C     double function
C      double precision f131,f132,f133,f141,f142,f143,f144
C      double precision fl61,fl62,fl63,fl64,fl65,fl66
C      double precision fl51,fl52,fl53,fl54,fl55
C      double precision f231,f232,f233,f241,f242,f243,f244
C      double precision f251,f252,f253,f254,f255
C      double precision f261,f262,f263,f264,f265,f266

      DATA NDVPT/6/
      DATA IGL,IGH,IMJ,IBH,ICA,ICG,IVN,IPW,IPG,IVG,IP9,IGD,IXLF,IEX,
     +     XLF/0,0,0,0,0,1,0,0,1,0,0,1,0,0,0.00D0/
      DATA IWR/0/
C     ..
C     .. Statement Function definitions ..
c  statement functions:

c.....three point formula for the 1st deriv.

c.....four point formula for the 1st deriv.

c.....five point formula for the 1st deriv.

c.....six point formula for the 1st deriv.

c.....three point formula for the 2nd deriv.

c.....four point formula for the 2nd deriv.

c.....five point formula for the 2nd deriv.

c.....six point formula for the 2nd deriv.
      F131(F0,F1,F2,D) = (-3d0*F0+4d0*F1-F2)/ (2d0*D)
      F132(G1,F0,F1,D) = (-1d0*G1-0d0*F0+F1)/ (2d0*D)
      F133(G2,G1,F0,D) = (G2-4d0*G1+3d0*F0)/ (2d0*D)
      F141(F0,F1,F2,F3,D) = (-11d0*F0+18d0*F1-9d0*F2+2d0*F3)/ (6d0*D)
      F142(G1,F0,F1,F2,D) = (-2d0*G1-3d0*F0+6d0*F1-F2)/ (6d0*D)
      F143(G2,G1,F0,F1,D) = (G2-6d0*G1+3d0*F0+2d0*F1)/ (6d0*D)
      F144(G3,G2,G1,F0,D) = (-2d0*G3+9d0*G2-18d0*G1+11d0*F0)/ (6d0*D)
      F151(F0,F1,F2,F3,F4,D) = 
     &     (-50d0*F0+96d0*F1-72d0*F2+32d0*F3-6d0*F4)/ (24d0*D)
      F152(G1,F0,F1,F2,F3,D) = 
     &     (-6d0*G1-20d0*F0+36d0*F1-12d0*F2+2d0*F3)/ (24d0*D)
      F153(G2,G1,F0,F1,F2,D) = 
     &     (2d0*G2-16d0*G1-0d0*F0+16d0*F1-2d0*F2)/ (24d0*D)
      F154(G3,G2,G1,F0,F1,D) = 
     &     (-2d0*G3+12d0*G2-36d0*G1+20d0*F0+6d0*F1)/ (24d0*D)
      F155(G4,G3,G2,G1,F0,D) = 
     &     (6d0*G4-32d0*G3+72d0*G2-96d0*G1+50d0*F0)/ (24d0*D)
      F161(F0,F1,F2,F3,F4,F5,D) = 
     &     (-274d0*F0+600d0*F1-600d0*F2+400d0*F3-150d0*F4+
     +                            24d0*F5)/ (120d0*D)
      F162(G1,F0,F1,F2,F3,F4,D) = 
     &     (-24d0*G1-130d0*F0+240d0*F1-120d0*F2+40d0*F3-
     +                            6d0*F4)/ (120d0*D)
      F163(G2,G1,F0,F1,F2,F3,D) = 
     &     (6d0*G2-60d0*G1-40d0*F0+120d0*F1-30d0*F2+4d0*F3)/
     +                            (120d0*D)
      F164(G3,G2,G1,F0,F1,F2,D) = 
     &     (-4d0*G3+30d0*G2-120d0*G1+40d0*F0+60d0*F1-6d0*F2)/
     +                            (120d0*D)
      F165(G4,G3,G2,G1,F0,F1,D) = 
     &     (6d0*G4-40d0*G3+120d0*G2-240d0*G1+130d0*F0+
     +                            24d0*F1)/ (120d0*D)
      F166(G5,G4,G3,G2,G1,F0,D) = 
     &     (-24d0*G5+150d0*G4-400d0*G3+600d0*G2-600d0*G1+
     +                            274d0*F0)/ (120d0*D)
      F231(F0,F1,F2,D) = (F0-2d0*F1+F2)/ (D*D)
      F232(G1,F0,F1,D) = (G1-2d0*F0+F1)/ (D*D)
      F233(G2,G1,F0,D) = (G2-2d0*G1+F0)/ (D*D)
      F241(F0,F1,F2,F3,D) = (6d0*F0-15d0*F1+12d0*F2-3d0*F3)/ (3d0*D*D)
      F242(G1,F0,F1,F2,D) = (3d0*G1-6d0*F0+3d0*F1+0d0*F2)/ (3d0*D*D)
      F243(G2,G1,F0,F1,D) = (0d0*G2+3d0*G1-6d0*F0+3d0*F1)/ (3d0*D*D)
      F244(G3,G2,G1,F0,D) = (-3d0*G3+2d0*G2+15d0*G1+6d0*F0)/ (3d0*D*D)
      F251(F0,F1,F2,F3,F4,D) = 
     &     (35d0*F0-104d0*F1+114d0*F2-56d0*F3+11d0*F4)/
     +                         (12d0*D*D)
      F252(G1,F0,F1,F2,F3,D) = 
     &     (11d0*G1-20d0*F0+6d0*F1+4d0*F2-F3)/ (12d0*D*D)
      F253(G2,G1,F0,F1,F2,D) = 
     &     (-G2+16d0*G1-30d0*F0+16d0*F1-F2)/ (12d0*D*D)
      F254(G3,G2,G1,F0,F1,D) = 
     &     (-G3+4d0*G2+6d0*G1-20d0*F0+11d0*F1)/ (12d0*D*D)
      F255(G4,G3,G2,G1,F0,D) = 
     &     (11d0*G4-56d0*G3+114d0*G2-104d0*G1+35d0*F0)/
     +                         (12d0*D*D)
      F261(F0,F1,F2,F3,F4,F5,D) = 
     &     (225d0*F0-770d0*F1+1070d0*F2-780d0*F3+305*F4-
     +                            50d0*F5)/ (60d0*D*D)
      F262(G1,F0,F1,F2,F3,F4,D) = 
     &     (50d0*G1-75d0*F0-20d0*F1+70d0*F2-30d0*F3+5d0*F4)/
     +                            (60d0*D*D)
      F263(G2,G1,F0,F1,F2,F3,D) = 
     &     (-5d0*G2+80d0*G1-150d0*F0+80d0*F1-5d0*F2+0d0*F3)/
     +                            (60d0*D*D)
      F264(G3,G2,G1,F0,F1,F2,D) = 
     &     (0d0*G3-5d0*G2+80d0*G1-150d0*F0+80d0*F1-5d0*F2)/
     +                            (60d0*D*D)
      F265(G4,G3,G2,G1,F0,F1,D) = 
     &     (5d0*G4-30d0*G3+70d0*G2-20d0*G1-75d0*F0+50d0*F1)/
     +                            (60d0*D*D)
      F266(G5,G4,G3,G2,G1,F0,D) = 
     &     (-50d0*G5+305d0*G4-780d0*G3+1070d0*G2-770d0*G1+
     +                            225d0*F0)/ (60d0*D*D)
C     ..

c.....-----------------------------------------------------------------
      IF (IWR.EQ.1) WRITE (6,FMT=
     +'(/''  igl,igh,imj,ihb,ica,icg,ivn,ipw,ipg,'',            ''ivg,ip
     +9,igd,ixlf,iex,xlf='',14i2,f10.4)') IGL,IGH,IMJ,IHB,ICA,ICG,IVN,
     +    IPW,IPG,IVG,IP9,IGD,IXLF,IEX,XLF
      IWR = 0

      IST = IST1
c     write(6,*) 'ndvpt ist mesh dx drdi2' ,ndvpt,ist,mesh,dx,
c    &            drdi2(ist)

      IF (NDVPT.LT.3 .OR. NDVPT.GT.6) THEN
        WRITE (6,FMT=9000) NDVPT
        STOP 18
      END IF
c.....
c.....ro: total(core+val)(up+down) charge density.

      DO 10 I = IST,MESH
        ROU(I) = RO(I)* (ZTA(I)+1.D0)/2.D0
   10 CONTINUE
c.....
      IF (IGD.LE.0) THEN

        DO 20 I = IST,MESH
          DRR(I) = 0.D0
          DDRR(I) = 0.D0
          DRRU(I) = 0.D0
          DDRRU(I) = 0.D0
   20   CONTINUE
        GO TO 60

      END IF

      I1 = IST
      I2 = IST + 1
      I3 = IST + 2
      I4 = IST + 3
      I5 = IST + 4
      I6 = IST + 5

c.....drr:d(ro)/dr, ddrr=d(d(ro)/dr)/dr
cc.... drru,ddrru: for up   spin,
c.....

      IF (NSPIN.EQ.1) GO TO 40
c.....
      IF (NDVPT.EQ.3) THEN

        DRX1 = F131(RO(I1),RO(I2),RO(I3),DX)
        DRXU1 = F131(ROU(I1),ROU(I2),ROU(I3),DX)
        DRXX1 = F231(RO(I1),RO(I2),RO(I3),DX)
        DRXXU1 = F231(ROU(I1),ROU(I2),ROU(I3),DX)

      ELSE IF (NDVPT.EQ.4) THEN

        DRX1 = F141(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRXU1 = F141(ROU(I1),ROU(I2),ROU(I3),ROU(I4),DX)
        DRXX1 = F241(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRXXU1 = F241(ROU(I1),ROU(I2),ROU(I3),ROU(I4),DX)
        DRX2 = F142(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRXU2 = F142(ROU(I1),ROU(I2),ROU(I3),ROU(I4),DX)
        DRXX2 = F242(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRXXU2 = F242(ROU(I1),ROU(I2),ROU(I3),ROU(I4),DX)

      ELSE IF (NDVPT.EQ.5) THEN

        DRX1 = F151(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRXU1 = F151(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),DX)
        DRXX1 = F251(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRXXU1 = F251(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),DX)
        DRX2 = F152(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRXU2 = F152(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),DX)
        DRXX2 = F252(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRXXU2 = F252(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),DX)

      ELSE IF (NDVPT.EQ.6) THEN

        DRX1 = F161(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXU1 = F161(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),ROU(I6),DX)
        DRXX1 = F261(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXXU1 = F261(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),ROU(I6),
     +           DX)
        DRX2 = F162(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXU2 = F162(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),ROU(I6),DX)
        DRXX2 = F262(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXXU2 = F262(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),ROU(I6),
     +           DX)
        DRX3 = F163(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXU3 = F163(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),ROU(I6),DX)
        DRXX3 = F263(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXXU3 = F263(ROU(I1),ROU(I2),ROU(I3),ROU(I4),ROU(I5),ROU(I6),
     +           DX)

      END IF

      DRR(I1) = DRX1/DRDI(I1)
      DDRR(I1) = (DRXX1-DRX1*DRDI2(I1))/DRDI(I1)**2
      DRRU(I1) = DRXU1/DRDI(I1)
      DDRRU(I1) = (DRXXU1-DRXU1*DRDI2(I1))/DRDI(I1)**2

      IF (NDVPT.GT.3) THEN

        DRR(I2) = DRX2/DRDI(I2)
        DDRR(I2) = (DRXX2-DRX2*DRDI2(I2))/DRDI(I2)**2
        DRRU(I2) = DRXU2/DRDI(I2)
        DDRRU(I2) = (DRXXU2-DRXU2*DRDI2(I2))/DRDI(I2)**2

        IF (NDVPT.EQ.6) THEN
          DRR(I3) = DRX3/DRDI(I3)
          DDRR(I3) = (DRXX3-DRX3*DRDI2(I3))/DRDI(I3)**2
          DRRU(I3) = DRXU3/DRDI(I3)
          DDRRU(I3) = (DRXXU3-DRXU3*DRDI2(I3))/DRDI(I3)**2
        END IF

      END IF

      NRED = DBLE(NDVPT)/2 + .1D0

      DO 30 J = NRED + IST,MESH - NRED

        IF (NDVPT.EQ.3) THEN

          DRX = F132(RO(J-1),RO(J),RO(J+1),DX)
          DRXU = F132(ROU(J-1),ROU(J),ROU(J+1),DX)
          DRXX = F232(RO(J-1),RO(J),RO(J+1),DX)
          DRXXU = F232(ROU(J-1),ROU(J),ROU(J+1),DX)

        ELSE IF (NDVPT.EQ.4) THEN

          DRX = F142(RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXU = F142(ROU(J-1),ROU(J),ROU(J+1),ROU(J+2),DX)
          DRXX = F242(RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXXU = F242(ROU(J-1),ROU(J),ROU(J+1),ROU(J+2),DX)

        ELSE IF (NDVPT.EQ.5) THEN

          DRX = F153(RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXU = F153(ROU(J-2),ROU(J-1),ROU(J),ROU(J+1),ROU(J+2),DX)
          DRXX = F253(RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXXU = F253(ROU(J-2),ROU(J-1),ROU(J),ROU(J+1),ROU(J+2),DX)

        ELSE IF (NDVPT.EQ.6) THEN

          DRX = F164(RO(J-3),RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXU = F164(ROU(J-3),ROU(J-2),ROU(J-1),ROU(J),ROU(J+1),
     +           ROU(J+2),DX)
          DRXX = F264(RO(J-3),RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXXU = F264(ROU(J-3),ROU(J-2),ROU(J-1),ROU(J),ROU(J+1),
     +            ROU(J+2),DX)

        END IF

        DRR(J) = DRX/DRDI(J)
        DDRR(J) = (DRXX-DRX*DRDI2(J))/DRDI(J)**2
        DRRU(J) = DRXU/DRDI(J)
        DDRRU(J) = (DRXXU-DRXU*DRDI2(J))/DRDI(J)**2

   30 CONTINUE
c.....
      IF (NDVPT.EQ.3) THEN

        DRX0 = F133(RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXU0 = F133(ROU(MESH-2),ROU(MESH-1),ROU(MESH),DX)
        DRXX0 = F233(RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXXU0 = F233(ROU(MESH-2),ROU(MESH-1),ROU(MESH),DX)

      ELSE IF (NDVPT.EQ.4) THEN

        DRX1 = F143(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXU1 = F143(ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),ROU(MESH),DX)
        DRXX1 = F243(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXXU1 = F243(ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),ROU(MESH),DX)
        DRX0 = F144(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXU0 = F144(ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),ROU(MESH),DX)
        DRXX0 = F244(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXXU0 = F244(ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),ROU(MESH),DX)

      ELSE IF (NDVPT.EQ.5) THEN

        DRX1 = F154(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +         RO(MESH),DX)
        DRXU1 = F154(ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),
     +          ROU(MESH),DX)
        DRXX1 = F254(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +          RO(MESH),DX)
        DRXXU1 = F254(ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),
     +           ROU(MESH),DX)
        DRX0 = F155(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +         RO(MESH),DX)
        DRXU0 = F155(ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),
     +          ROU(MESH),DX)
        DRXX0 = F255(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +          RO(MESH),DX)
        DRXXU0 = F255(ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),ROU(MESH-1),
     +           ROU(MESH),DX)

      ELSE IF (NDVPT.EQ.6) THEN

        DRX2 = F164(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +         RO(MESH-1),RO(MESH),DX)
        DRXU2 = F164(ROU(MESH-5),ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),
     +          ROU(MESH-1),ROU(MESH),DX)
        DRXX2 = F264(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +          RO(MESH-1),RO(MESH),DX)
        DRXXU2 = F264(ROU(MESH-5),ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),
     +           ROU(MESH-1),ROU(MESH),DX)

        DRX1 = F165(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +         RO(MESH-1),RO(MESH),DX)
        DRXU1 = F165(ROU(MESH-5),ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),
     +          ROU(MESH-1),ROU(MESH),DX)
        DRXX1 = F265(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +          RO(MESH-1),RO(MESH),DX)
        DRXXU1 = F265(ROU(MESH-5),ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),
     +           ROU(MESH-1),ROU(MESH),DX)

        DRX0 = F166(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +         RO(MESH-1),RO(MESH),DX)
        DRXU0 = F166(ROU(MESH-5),ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),
     +          ROU(MESH-1),ROU(MESH),DX)
        DRXX0 = F266(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +          RO(MESH-1),RO(MESH),DX)
        DRXXU0 = F266(ROU(MESH-5),ROU(MESH-4),ROU(MESH-3),ROU(MESH-2),
     +           ROU(MESH-1),ROU(MESH),DX)


      END IF

      IF (NDVPT.GT.3) THEN

        IF (NDVPT.EQ.6) THEN
          DRR(MESH-2) = DRX2/DRDI(MESH-2)
          DRRU(MESH-2) = DRXU2/DRDI(MESH-2)
          DDRR(MESH-2) = (DRXX2-DRX2*DRDI2(MESH-2))/DRDI(MESH-2)**2
          DDRRU(MESH-2) = (DRXXU2-DRXU2*DRDI2(MESH-2))/DRDI(MESH-2)**2
        END IF

        DRR(MESH-1) = DRX1/DRDI(MESH-1)
        DRRU(MESH-1) = DRXU1/DRDI(MESH-1)
        DDRR(MESH-1) = (DRXX1-DRX1*DRDI2(MESH-1))/DRDI(MESH-1)**2
        DDRRU(MESH-1) = (DRXXU1-DRXU1*DRDI2(MESH-1))/DRDI(MESH-1)**2

      END IF

      DRR(MESH) = DRX0/DRDI(MESH)
      DRRU(MESH) = DRXU0/DRDI(MESH)
      DDRR(MESH) = (DRXX0-DRX0*DRDI2(MESH))/DRDI(MESH)**2
      DDRRU(MESH) = (DRXXU0-DRXU0*DRDI2(MESH))/DRDI(MESH)**2

      GO TO 60

   40 CONTINUE

c.....
      IF (NDVPT.EQ.3) THEN

        DRX1 = F131(RO(I1),RO(I2),RO(I3),DX)
        DRXX1 = F231(RO(I1),RO(I2),RO(I3),DX)

      ELSE IF (NDVPT.EQ.4) THEN

        DRX1 = F141(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRXX1 = F241(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRX2 = F142(RO(I1),RO(I2),RO(I3),RO(I4),DX)
        DRXX2 = F242(RO(I1),RO(I2),RO(I3),RO(I4),DX)

      ELSE IF (NDVPT.EQ.5) THEN

        DRX1 = F151(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRXX1 = F251(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRX2 = F152(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)
        DRXX2 = F252(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),DX)

      ELSE IF (NDVPT.EQ.6) THEN

        DRX1 = F161(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXX1 = F261(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRX2 = F162(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXX2 = F262(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRX3 = F163(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)
        DRXX3 = F263(RO(I1),RO(I2),RO(I3),RO(I4),RO(I5),RO(I6),DX)

      END IF

      DRR(I1) = DRX1/DRDI(I1)
      DDRR(I1) = (DRXX1-DRX1*DRDI2(I1))/DRDI(I1)**2

      IF (NDVPT.GT.3) THEN

        DRR(I2) = DRX2/DRDI(I2)
        DDRR(I2) = (DRXX2-DRX2*DRDI2(I2))/DRDI(I2)**2

        IF (NDVPT.EQ.6) THEN
          DRR(I3) = DRX3/DRDI(I3)
          DDRR(I3) = (DRXX3-DRX3*DRDI2(I3))/DRDI(I3)**2
        END IF

      END IF

      NRED = DBLE(NDVPT)/2 + .1D0

      IF (MESH-NRED.LE.IST) THEN
         WRITE (6,FMT='(/'' mesh-nred.lt.ist. mesh,nred,ist='',3i4)')
     +        MESH,NRED,IST
         STOP 13
      END IF

      DO 50 J = NRED + IST,MESH - NRED

        IF (NDVPT.EQ.3) THEN

          DRX = F132(RO(J-1),RO(J),RO(J+1),DX)
          DRXX = F232(RO(J-1),RO(J),RO(J+1),DX)

        ELSE IF (NDVPT.EQ.4) THEN

          DRX = F142(RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXX = F242(RO(J-1),RO(J),RO(J+1),RO(J+2),DX)

        ELSE IF (NDVPT.EQ.5) THEN

          DRX = F153(RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXX = F253(RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)

        ELSE IF (NDVPT.EQ.6) THEN

          DRX = F164(RO(J-3),RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)
          DRXX = F264(RO(J-3),RO(J-2),RO(J-1),RO(J),RO(J+1),RO(J+2),DX)

        END IF

        DRR(J) = DRX/DRDI(J)
        DDRR(J) = (DRXX-DRX*DRDI2(J))/DRDI(J)**2
c           write(6,9000) j,drr(j)
c9000       format(1x,' j drr(j)',i5,e15.5)
   50 CONTINUE
c.....
      IF (NDVPT.EQ.3) THEN

        DRX0 = F133(RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXX0 = F233(RO(MESH-2),RO(MESH-1),RO(MESH),DX)

      ELSE IF (NDVPT.EQ.4) THEN

        DRX1 = F143(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXX1 = F243(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRX0 = F144(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)
        DRXX0 = F244(RO(MESH-3),RO(MESH-2),RO(MESH-1),RO(MESH),DX)

      ELSE IF (NDVPT.EQ.5) THEN

        DRX1 = F154(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +         RO(MESH),DX)
        DRXX1 = F254(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +          RO(MESH),DX)
        DRX0 = F155(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +         RO(MESH),DX)
        DRXX0 = F255(RO(MESH-4),RO(MESH-3),RO(MESH-2),RO(MESH-1),
     +          RO(MESH),DX)

      ELSE IF (NDVPT.EQ.6) THEN

        DRX2 = F164(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +         RO(MESH-1),RO(MESH),DX)
        DRXX2 = F264(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +          RO(MESH-1),RO(MESH),DX)

        DRX1 = F165(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +         RO(MESH-1),RO(MESH),DX)
        DRXX1 = F265(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +          RO(MESH-1),RO(MESH),DX)

        DRX0 = F166(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +         RO(MESH-1),RO(MESH),DX)
        DRXX0 = F266(RO(MESH-5),RO(MESH-4),RO(MESH-3),RO(MESH-2),
     +          RO(MESH-1),RO(MESH),DX)


      END IF

      IF (NDVPT.GT.3) THEN

        IF (NDVPT.EQ.6) THEN
          DRR(MESH-2) = DRX2/DRDI(MESH-2)
          DDRR(MESH-2) = (DRXX2-DRX2*DRDI2(MESH-2))/DRDI(MESH-2)**2
        END IF

        DRR(MESH-1) = DRX1/DRDI(MESH-1)
        DDRR(MESH-1) = (DRXX1-DRX1*DRDI2(MESH-1))/DRDI(MESH-1)**2

      END IF

      DRR(MESH) = DRX0/DRDI(MESH)
      DDRR(MESH) = (DRXX0-DRX0*DRDI2(MESH))/DRDI(MESH)**2

   60 CONTINUE
C
C
C
C      write(6,8000) nspin,ist1,mesh,dx
C8000 format(1x,' nspin ist1 mesh dx',3i5,2d20.10)
C     write(6,8001) (ro(kk),drr(kk),ddrr(kk),
c    &  drdi(kk),drdi2(kk), kk=ist1,mesh,20)
c8001 format(1x,' ro drr ddrr drdi drdi2',5f12.5)
      RETURN
 9000 FORMAT (/,' ndvpt should be ge.4 .or. le.6. ndvpt=',i3)
      END SUBROUTINE