C      ________________________________________________________
C     |                                                        |
C     |COMPUTE DETERMINANT OF A GENERAL COMPLEX FACTORED MATRIX|
C     |                                                        |
C     |    INPUT:                                              |
C     |                                                        |
C     |         A     -CFACT'S OUTPUT                          |
C     |                                                        |
C     |    OUTPUT:                                             |
C     |                                                        |
C     |         CDET,E --DETERMINANT IS CDET*10.**E (E INTEGER)|
C     |                                                        |
C     |    BUILTIN FUNCTIONS: ALOG10,CABS,DLOG10,INT           |
C     |________________________________________________________|
C
      COMPLEX FUNCTION CDET(E,A)
      COMPLEX A(1),D
      REAL F,G
      DOUBLE PRECISION C
      INTEGER E,H,I,J,K,L,M,N,O
      I = INT(A(1))
      IF ( IABS(I) .EQ. 1239 ) GOTO 10
      WRITE(6,*) 'ERROR: MUST FACTOR BEFORE COMPUTING DETERMINANT'
      STOP
10    E = 0
      IF ( I .LT. 0. ) GOTO 70
      N = INT(A(2))
      IF ( N .EQ. 1 ) GOTO 80
      D = 1.
      F = 2.**64
      G = 1./F
      H = 64
      M = N + 1
      J = 0
      K = 4
      L = 3 - M + M*N
      DO 40 I = K,L,M
           J = J + 1
           O = INT(A(I))
           IF ( O .GT. J ) D = -D
           D = D*A(I+J)
20         IF ( CABS(D) .LT. F ) GOTO 30
           E = E + H
           D = D*G
           GOTO 20
30         IF ( CABS(D) .GT. G ) GOTO 40
           E = E - H
           D = D*F
           GOTO 30
40    CONTINUE
      D = D*A(L+M)
      IF ( E .NE. 0 ) GOTO 50
      CDET = D
      RETURN
50    IF ( CABS(D) .EQ. 0. ) GOTO 90
      C = ALOG10(CABS(D)) + E*DLOG10(2.D0)
      E = C
      C = C - E
      IF ( C .LE. 0.D0 ) GOTO 60
      C = C - 1
      E = E + 1
60    F = 10.**C
      D = F*(D/CABS(D))
      CDET = D
      RETURN
70    CDET = 0.
      RETURN
80    CDET = A(5)
      RETURN
90    E = 0
      GOTO 70
      END
