      SUBROUTINE CHOLD(A,IRDA,NA,DETA,*)                                    0420
C                                                                           0430
C MATRIX INVERSION USING CHOLESKI DECOMPOSITION                             0440
C                                                                           0450
C INPUT ARGUMENTS                                                           0460
C A = ARRAY CONTAINING POSITIVE DEFINITE SYMMETRIC INPUT MATRIX             0470
C IRDA = ROW DIMENSION OF ARRAY CONTAINING INPUT MATRIX                     0480
C NA = SIZE OF INPUT MATRIX                                                 0490
C OUTPUT ARGUMENTS                                                          0500
C A = CONTAINS INVERSE OF INPUT MATRIX (INPUT DESTROYED)                    0510
C DETA = DETERMINANT OF INPUT MATRIX                                        0520
C * = ERROR RETURN (TAKEN IF NA .LT. 1 OR IF DETA .LT. SING)                0530
C                                                                           0540
      DOUBLE PRECISION A,DETA,SUM,SQRT,DSQRT,ABS,DABS,SING                  0550
      DIMENSION A(IRDA,NA)                                                  0560
      SQRT(SUM) = DSQRT(SUM)                                                0570
      ABS(DETA) = DABS(DETA)                                                0580
      DATA SING/1D-10/                                                      0590
C CHOLESKI DECOMPOSITION OF INPUT MATRIX INTO TRIANGULAR MATRIX             0600
      IF(NA .LT. 1) GO TO 18                                                0610
      DETA = A(1,1)                                                         0620
      A(1,1) = SQRT(A(1,1))                                                 0630
      IF(NA .EQ. 1) GO TO 6                                                 0640
      DO 1 I = 2,NA                                                         0650
    1   A(I,1) = A(I,1) / A(1,1)                                            0660
      DO 5 J = 2,NA                                                         0670
        SUM = 0.                                                            0680
        J1 = J - 1                                                          0690
        DO 2 K = 1,J1                                                       0700
    2     SUM = SUM + A(J,K) ** 2                                           0710
        DETA = DETA * (A(J,J) - SUM)                                        0720
        A(J,J) = SQRT(A(J,J) - SUM)                                         0730
        IF(J .EQ. NA) GO TO 5                                               0740
        J2 = J + 1                                                          0750
        DO 4 I = J2,NA                                                      0760
          SUM = 0.                                                          0770
          DO 3 K = 1,J1                                                     0780
    3       SUM = SUM + A(I,K) * A(J,K)                                     0790
    4     A(I,J) = (A(I,J) - SUM) / A(J,J)                                  0800
    5   CONTINUE                                                            0810
    6 IF(ABS(DETA) .LT. SING) GO TO 16                                      0820
C INVERSION OF LOWER TRIANGULAR MATRIX                                      0830
      DO 7 I = 1,NA                                                         0840
    7   A(I,I) = 1. / A(I,I)                                                0850
      IF(NA .EQ. 1) GO TO 10                                                0860
      N1 = NA - 1                                                           0870
      DO 9 J = 1,N1                                                         0880
        J2 = J + 1                                                          0890
        DO 9 I = J2,NA                                                      0900
          SUM = 0.                                                          0910
          I1 = I - 1                                                        0920
          DO 8 K = J,I1                                                     0930
    8       SUM = SUM + A(I,K) * A(K,J)                                     0940
    9     A(I,J) = - A(I,I) * SUM                                           0950
C CONSTRUCTION OF INVERSE OF INPUT MATRIX                                   0960
   10 DO 15 J = 1,NA                                                        0970
        IF(J .EQ. 1) GO TO 12                                               0980
        J1 = J - 1                                                          0990
        DO 11 I = 1,J1                                                      1000
   11     A(I,J) = A(J,I)                                                   1010
   12   DO 14 I = J,NA                                                      1020
          SUM = 0.                                                          1030
          DO 13 K = I,NA                                                    1040
   13       SUM = SUM + A(K,I) * A(K,J)                                     1050
   14     A(I,J) = SUM                                                      1060
   15   CONTINUE                                                            1070
      RETURN                                                                1080
   16 WRITE(6,17) DETA                                                      1090
   17 FORMAT(10X, 'SINGULAR MATRIX IN CHOLD. DET =',E20.5)                  1100
      RETURN 1                                                              1110
   18 WRITE(6,19)                                                           1120
   19 FORMAT(10X,'MATRIX OF DIMENSION ZERO IN CHOLD')                       1130
      RETURN 1                                                              1140
      END                                                                   1150
