C      ________________________________________________________
C     |                                                        |
C     |  ESTIMATE 1-NORM CONDITION OF GENERAL COMPLEX MATRIX   |
C     |                                                        |
C     |    INPUT:                                              |
C     |                                                        |
C     |         A     --CFACT'S OUTPUT                         |
C     |                                                        |
C     |         B     --COMPLEX WORK ARRAY (LENGTH AT LEAST N) |
C     |                                                        |
C     |    OUTPUT:                                             |
C     |                                                        |
C     |         CCON   --CONDITION NUMBER                      |
C     |                 (IF MATRIX IS SINGULAR, CCON = -1)     |
C     |                                                        |
C     |    BUILTIN FUNCTIONS: CABS,CONJG,INT,REAL              |
C     |    PACKAGE SUBROUTINES: CSOLVE,CTRANS                  |
C     |________________________________________________________|
C
      FUNCTION CCON(A,B)
      COMPLEX A(1),B(1)
      REAL C,D,T
      INTEGER I,J,M,N
      I = INT(A(1))
      IF ( IABS(I) .EQ. 1239 ) GOTO 10
      WRITE(6,*) 'ERROR: MUST FACTOR BEFORE ESTIMATING CONDITION'
      STOP
10    IF ( I .LT. 0. ) GOTO 110
      M = 0
      N = INT(A(2))
      C = 1./REAL(A(2))
      DO 20 J = 1,N
20         B(J) = C
      GOTO 50
30    DO 40 J = 1,N
40         B(J) = 0.
      B(M) = 1.
50    CALL CSOLVE(B,A,B)
      C = 0.
      DO 70 J = 1,N
           T = CABS(B(J))
           C = C + T
           IF ( T .NE. 0. ) GOTO 60
           B(J) = 1.
           GOTO 70
60         B(J) = CONJG(B(J))/T
70    CONTINUE
      CALL CTRANS(B,A,B)
      I = 1
      DO 80 J = 1,N
80         IF ( CABS(B(I)) .LT. CABS(B(J)) ) I = J
      IF ( M .EQ. 0 ) GOTO 90
      IF ( M .EQ. I ) GOTO 100
      IF ( D .GE. C ) GOTO 100
90    M = I
      D = C
      GOTO 30
100   C = C*A(3)
      IF ( C .LT. 1. ) C = 1.
      CCON = C
      RETURN
110   CCON = -1.
      RETURN
      END
