!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***S/P LIN_DIFUVD2_AD ADJ of LIN_DIFUVD2
*

      SUBROUTINE LIN_DIFUVD2_AD(P, A, B, C, D, DELTA, N, NK, 1
     &                          A5, B5, C5, D5, P5, P5P, DELTA5)
*

      IMPLICIT NONE
      INTEGER N, NK
      REAL P(N,NK), A(N,NK), B(N,NK), C(N,NK), D(N,NK), DELTA(N,NK)
      REAL A5(N,NK), B5(N,NK), C5(N,NK), D5(N,NK)
      REAL P5(N,NK), DELTA5(N,NK),P5P(N,NK)
*
*Author
*          S. Laroche
*
*Object
*
*Arguments
*-----------------------------------------------------------------------
*
      REAL X,XT,XTT
      INTEGER I, K
*
*
******START TRAJECTORY **********************************************
*
      DO I=1,N
       C5(I,NK)    = 0.
       P5(I,1)     =-C5(I,1)/B5(I,1)
       P5P(I,1)    =-C5(I,1)/B5(I,1)
       DELTA5(I,1) = D5(I,1)/B5(I,1)
      ENDDO
*
      DO K=2,NK
      DO I=1,N
       P5(I,K)     = -C5(I,K)/(B5(I,K)+A5(I,K)*P5(I,K-1))
       P5P(I,K)    = -C5(I,K)/(B5(I,K)+A5(I,K)*P5P(I,K-1))
       DELTA5(I,K) = (D5(I,K)-A5(I,K)*DELTA5(I,K-1))/(B5(I,K)+A5(I,K)*P5(I,K-1))
      ENDDO
      ENDDO
*
      DO I=1,N
       P5P(I,NK) = DELTA5(I,NK)
      ENDDO
      DO K=NK-1,1,-1
      DO I=1,N
       P5P(I,K) = P5P(I,K)*P5P(I,K+1) + DELTA5(I,K)
      ENDDO
      ENDDO
*
******END TRAJECTORY ************************************************
*

      DO K=1,NK-1
      DO I=N,1,-1
       DELTA(I,K) = P(I,K) 
       P(I,K+1)   = P(I,K)*P5(I,K)     + P(I,K+1)
       P(I,K)     = P(I,K)*P5P(I,K+1)
      ENDDO
      ENDDO
      DO I=N,1,-1
       DELTA(I,NK) = P(I,NK) 
       P(I,NK)     = 0.
      ENDDO

      DO K=NK,2,-1
      DO I=1,N

       X = (D5(I,K)-A5(I,K)*DELTA5(I,K-1))/((B5(I,K)+A5(I,K)*P5(I,K-1))**2)

       P(I,K-1) = P(I,K-1)         - DELTA(I,K)*A5(I,K)*X
       A(I,K)   = A(I,K)           - DELTA(I,K)*P5(I,K-1)*X
       B(I,K)   = B(I,K)           - DELTA(I,K)*X
       DELTA(I,K-1) = DELTA(I,K-1) - DELTA(I,K)*A5(I,K)/(B5(I,K)+A5(I,K)*P5(I,K-1))
       A(I,K)   = A(I,K)           - DELTA(I,K)*DELTA5(I,K-1)/(B5(I,K)+A5(I,K)*P5(I,K-1))
       D(I,K)   = D(I,K)           + DELTA(I,K)/(B5(I,K)+A5(I,K)*P5(I,K-1))
       DELTA(I,K)   = 0.

       A(I,K) = A(I,K)     + P(I,K)*P5(I,K-1)*C5(I,K)/((B5(I,K)+A5(I,K)*P5(I,K-1))**2)
       P(I,K-1) = P(I,K-1) + P(I,K)*A5(I,K)*C5(I,K)/((B5(I,K)+A5(I,K)*P5(I,K-1))**2)
       B(I,K) = B(I,K)     + P(I,K)*C5(I,K)/((B5(I,K)+A5(I,K)*P5(I,K-1))**2)
       C(I,K) = C(I,K)     - P(I,K)/(B5(I,K)+A5(I,K)*P5(I,K-1))
       P(I,K) = 0.0
      ENDDO
      ENDDO


      DO I=1,N
       B(I,1)     = B(I,1) - DELTA(I,1)*(D5(I,1)/(B5(I,1)**2))
       D(I,1)     = D(I,1) + DELTA(I,1)/B5(I,1)
       DELTA(I,1) = 0.
       B(I,1)     = B(I,1) + P(I,1)*(C5(I,1)/(B5(I,1)**2))
       C(I,1)     = C(I,1) - P(I,1)/B5(I,1)
       P(I,1)     = 0.
       C(I,NK)    = 0.
      ENDDO
*
      RETURN
      END