!     Nordsieck Integrator (fifth-order predictor-corrector algorithm)
!     [Nordsieck A. Math.Comput.,v.16,p.22,1962]
!     [Allen & Tildesley, p.340]
!     [Lecture notes for MSE 6270]
!     Kinetic energy is calculated here as well.
!     MSE 6270, Leonid Zhigilei

      SUBROUTINE NORD5()
      INCLUDE 'common.h'
      !SMP$ SCHEDULE (affinity)
      !SMP$ ASSERT(NODEPS)
      !SMP$ PARALLEL DO &
      !SMP$& PRIVATE(I,I3,P1,P2,P3,P4,P5,P6,P7,P8,P9), &
      !SMP$& SHARED(X,Q1,Q2,Q3,Q4,Q5,KRIGID,NAN3)

      trans_loop: DO I=1,NAN3
        IF(NDIM.EQ.2.AND.MOD(I,3).EQ.0) CYCLE trans_loop
        I3=(I-0.5)/3.+1.
        IF(KRIGID(I3).EQ.1) CYCLE trans_loop
        P1=Q2(I)
        P2=Q3(I)
        P3=P2+P2+P2
        P4=Q4(I)
        P5=P4+P4
        P6=P5+P5
        P7=Q5(I)
        P8=(P7+P7+P7)+(P7+P7)
        P9=P8+P8
        X(I)=P7+P4+P2+P1+Q1(I)+X(I)
        Q1(I)=P8+P6+P3+P1+P1+Q1(I)
        Q2(I)=P9+P6+P5+P3+P1
        Q3(I)=P9+P6+P2
        Q4(I)=P8+P4
      END DO trans_loop

      CALL Forces()

      QIN(1:NAN)=0.0d0

      !SMP$ ASSERT(NODEPS)
      !SMP$ PARALLEL DO &
      !SMP$& PRIVATE(I,I3,GG,P), &
      !SMP$& SHARED(KRIGID,G1,REQSTR,KTYPE,F,Q1,Q2,Q3,Q4,Q5, &
      !SMP$&        C1,C2,C3,C4,C5,NAN3,NPU,NBS), &
      !SMP$& REDUCTION(QIN)
      trans2_loop: DO I=1,NAN3
        IF(NDIM.EQ.2.AND.MOD(I,3).EQ.0) CYCLE trans2_loop
        I3=(I-0.5)/3.+1.
        IF(KRIGID(I3).EQ.1) CYCLE trans2_loop
        GG=G1(KTYPE(I3))
        P=GG*F(I)-Q2(I)
        X(I)=X(I)+C1*P
        Q1(I)=Q1(I)+C2*P
        Q2(I)=Q2(I)+P
        Q3(I)=Q3(I)+C3*P
        Q4(I)=Q4(I)+C4*P
        Q5(I)=Q5(I)+C5*P
        QIN(I3)=QIN(I3)+Q1(I)*Q1(I)*0.25/GG
      END DO trans2_loop

      RETURN
      END






