      SUBROUTINE SPL2 ( X,Y,Y2,N,F,G )                                          
C                                                                               
C        CIVEN A SET OF FUNCTIONAL VALUES (Y) CORRESPONDING TO A SET OF MESH    
C        POINTS (X) TOGETHER WITH THE SECOND DERIVATIVES AT THE END POINTS      
C        Y2(1) , Y2(N) SUBROUTINE  SPL2  COMPUTES THE SECOND DERIVATIVES        
C        (MOMENTS) AT ALL OTHER POINTS.                                         
C                                                                               
C        DESCRIPTION OF PARAMETERS                                              
C            X - VECTOR OF ARGUMENTS                                            
C            Y - ASSOCIATED VECTOR OF FUNCTIONAL VALUES                         
C           Y2 - VECTOR OF SECOND DERIVATIVES                                   
C            N - NUMBER OF MESH POINTS                                          
C          F,G - AUXILIARY VECTORS                                              
C                                                                               
      IMPLICIT REAL *8(A-H,O-Z)                                                 
      DIMENSION X(N),Y(N),Y2(N),F(N),G(N)                                       
C                                                                               
      F(1) =  .0                                                                
      G(1) =  .0                                                                
      NM1 = N - 1                                                               
      DO 2 K = 1,NM1                                                            
      H2 = X(K+1) - X(K)                                                        
      R2 = (Y(K+1) - Y(K))/H2                                                   
      IF(K.EQ.1) GO TO 1                                                        
      Z = 1./(2.*(H1+H2) - H1*G(J))                                             
      G(K) = Z*H2                                                               
      H = 6.*(R2-R1)                                                            
      IF(K.EQ.2) H = H - H1*Y2(1)                                               
      IF(K.EQ.NM1) H = H - H2*Y2(N)                                             
      F(K) = Z*(H-H1*F(J))                                                      
    1 J = K                                                                     
      H1 = H2                                                                   
      R1 = R2                                                                   
    2 CONTINUE                                                                  
      Y2(NM1) = F(NM1)                                                          
      IF(NM1.LE.2) RETURN                                                       
      NJ = NM1 - 1                                                              
      DO 3 J1 = 2,NJ                                                            
      K = N-J1                                                                  
      Y2(K) = F(K) - G(K)*Y2(K+1)                                               
    3 CONTINUE                                                                  
      RETURN                                                                    
      END                                                                       
