      SUBROUTINE SYINV(A,N1,NN,SE)                                              
C                                                                               
C    *****************************************************************          
C                                                                               
C        *                                                                      
C    *   THIS SUBROUTINE IS USED TO INVERT A SYMETRIC MATRIX         *          
C    *   BY PARTITIONNING TECHNIQUES                                 *          
C    *                                                               *          
C    *  A : THE MATRIX TO BE INVERTED (IT IS ALSO THE OUTPUT MATRIX) *          
C    *  N1: THE DECLARED SIZE OF THE MATRIX IN THE MAIN PROGRAM      *          
C    *  NN: THE REQUIRED SIZE OF THE MATRIX TO BE INVERTED           *          
C    * SE: VECTOR USED BY THIS SUBROUTINE ONL.SAME SIZE AS A         *          
C    *                                                               *          
C    *                  WRITTEN BY S. EL-HAKIM                       *          
C    *****************************************************************          
C                                                                               
      IMPLICIT REAL*8(A-H,O-Z)                                                  
         REAL*8 A(N1,N1),SE(N1)                                                 
      DET=A(1,1)*A(2,2)-A(1,2)**2                                               
      PX=A(2,2)/DET                                                             
      PY=A(1,1)/DET                                                             
      PXY=-A(1,2)/DET                                                           
      A1=A(1,3)*PX+A(2,3)*PXY                                                   
      A2=A(1,3)*PXY+A(2,3)*PY                                                   
      EP=A(3,3)-A1*A(3,1)-A2*A(3,2)                                             
      A(1,1)=PX+A1/EP*A1                                                        
      A(1,2)=PXY+A1/EP*A2                                                       
      A(2,1)=PXY+A2/EP*A1                                                       
      A(2,2)=PY+A2/EP*A2                                                        
      A(1,3)=-A1/EP                                                             
      A(2,3)=-A2/EP                                                             
      A(3,1)=A(1,3)                                                             
      A(3,2)=A(2,3)                                                             
      A(3,3)=1.0/EP                                                             
      N=3                                                                       
  200 N=N+1                                                                     
      M=N-1                                                                     
      DO 11 I=1,M                                                               
      SE(I)=0.0                                                                 
      DO 10 J=1,M                                                               
   10 SE(I)=SE(I)+A(I,J)*A(J,N)                                                 
   11 CONTINUE                                                                  
      EP=0.0                                                                    
      DO 12 J=1,M                                                               
   12 EP=EP+A(N,J)*SE(J)                                                        
      EB=A(N,N)-EP                                                              
      EI=1.0/EB                                                                 
      DO 100 I=1,M                                                              
      DO 100 J=1,M                                                              
  100 A(I,J)=A(I,J)+SE(I)*SE(J)*EI                                              
      DO 150 I=1,M                                                              
      A(I,N)=-SE(I)*EI                                                          
  150 A(N,I)=A(I,N)                                                             
      A(N,N)=EI                                                                 
      IF(NN.GT.N)GO TO 200                                                      
      RETURN                                                                    
      END                                                                       
