      SUBROUTINE EIGEN (A,S)                                                    
C     ******************************************************************        
C     *                                                                *        
C     *            SUBROUTINE 'EIGEN' COMPUTES THE EIGEN VALUES AND    *        
C     *  EIGEN VECTORS FOR A 3-D CASE.  IT CALLS 'EIGENZ' WHICH DOES   *        
C     *  THE COMPUTATION OF THE EIGEN VALUES AND VECTORS AND THEN      *        
C     *  PRINTS THE FINAL RESULTS.                                     *        
C     *                                                                *        
C     *      INPUT:                                                    *        
C     *            A - THE VARIANCE CO-VARIANCE MATRIX                 *        
C     *                                                                *        
C     *     OUTPUT:                                                    *        
C     *            A - AN ARRAY CONTAINING THE EIGEN VECTORS,          *        
C     *            S - THE SEMI MAJOR AXES.                            *        
C     *                                                                *        
C     *                NOTE: THE VARIANCE CO-VARIANCE MATRIX IS        *        
C     *                      DESTROYED.                                *        
C     *                                                                *        
C     *                           BY:  H. MONIWA   (1973)              *        
C     *                           MODIFIED BY:  R. CALDWELL   (1976)   *        
C     *                                                                *        
C     ******************************************************************        
C                                                                               
      IMPLICIT REAL*8 (A-H,O-Z), INTEGER*4 (I-N)                                
      DIMENSION A(3,3),R(9),EV(3),WS(6),S(3),B(3,3)                             
      INTEGER*4 XYZ(3)/'X','Y','Z'/                                             
C                                                                               
      EQUIVALENCE (R(1),B(1))                                                   
C                                                                               
C  PROGRAM FOR THE ANALYSIS OF ERROR ELLIPSOID                                  
C                                                                               
      A(2,1)=A(1,2)                                                             
      A(3,1)=A(1,3)                                                             
      A(3,2)=A(2,3)                                                             
   40 CONTINUE                                                                  
C                                                                               
      SUMA=0.0                                                                  
      DO 50 I=1,3                                                               
   50 SUMA=SUMA+A(I,I)                                                          
C                                                                               
      WRITE(6,11)                                                               
      WRITE(6,12) ((A(I,J),J=1,3),I=1,3)                                        
C                                                                               
C  EIGENVALUES AND EIGENVECTORS                                                 
C                                                                               
      CALL EIGENZ(A,R,EV,WS,3,3,0)                                              
C                                                                               
      SUMS=0.0                                                                  
      NEG=1                                                                     
C                                                                               
      DO 60 I=1,3                                                               
      IF(EV(I).LT.0.0) NEG=-1                                                   
      SUMS=SUMS+EV(I)                                                           
      S(I)=DSQRT(DABS(EV(4-I)))                                                 
      DO 60 J=1,3                                                               
   60 A(I,J)=R(9-I*3+J)                                                         
C                                                                               
      WRITE(6,13) (EV(4-I),(A(I,J),J=1,3),I=1,3)                                
C                                                                               
      DO 65 I=1,3                                                               
      DO 65 J=1,3                                                               
      B(I,J)=0.0                                                                
      DO 65 K=1,3                                                               
   65 B(I,J)=B(I,J)+A(K,I)*A(K,J)                                               
C                                                                               
      PAI=3.1415926535898                                                       
      DO 70 I=1,3                                                               
      DO 70 J=1,3                                                               
   70 A(I,J)=DARCOS(A(I,J))*180.0D0/PAI                                         
C                                                                               
      IF(NEG.EQ.-1) GO TO 100                                                   
C                                                                               
      WRITE(6,14)                                                               
      WRITE(6,17)                                                               
      WRITE(6,15) (XYZ(I),S(I),XYZ(I),(A(I,J),J=1,3),I=1,3)                     
      WRITE(6,16) ((B(I,J),J=1,3),I=1,3)                                        
C                                                                               
      GOTO 115                                                                  
  100 WRITE(6,18)                                                               
C                                                                               
  115 RETURN                                                                    
   11 FORMAT(1H1,//, T35,'*********************************',/,                 
     *               T35,'*                               *',/,                 
     *               T35,'*  ANALYSIS OF ERROR-ELLIPSOID  *',/,                 
     *               T35,'*                               *',/,                 
     *               T35,'*********************************',///)               
   12 FORMAT(1H0, 5X, '(1) READ-IN COVARIANCE MATRIX:',//,(T10,3D16.6))         
   13 FORMAT(1H0,/,6X,'(2) EIGENVALUES AND EIGENVECTORS OF COVARIANCE ',        
     *      'MATRIX:',// ,T14,'EIGENVALUES',T41,'EIGENVECTORS (DIRECTI',        
     *      'ON COSINES)',//,(T9, F15.6,T34,F15.6,2F12.6))                      
   14 FORMAT(1H0,/, 6X,'(3) PARAMETERS OF STANDARD ERROR-ELLIPSOID (19',        
     *       '.9% CONFIDENCE REGION):')                                         
   15 FORMAT(1H0,T41,'SPATIAL ANGLES (IN DEGREES) BETWEEN AXES',//,             
     *       T14,'SEMI-MAJOR AXES',  T53,'X(MODEL)', 2X,'Y(MODEL)', 2X,         
     *         'Z(MODEL)',//,(T14,A1,' =',F12.6,T41,A1,'(ELLIPSOID)',           
     *       F7.2,2F10.2))                                                      
   16 FORMAT(1H0,/, 6X,'(4) ORTHOGONALITY TEST',11H (M'M = I):,//,              
     *      (T10,3F16.6))                                                       
   17 FORMAT(1H+,T25,'________')                                                
   18 FORMAT(1H0,//,6X,'***(ERROR)*** NEGATIVE EIGENVALUE(S) DETECTED',         
     *      //,20X,'CHECK INPUT DATA FOR ROUND-OFF ERRORS')                     
      END                                                                       
