1       SUBROUTINE CCHKBL( NIN, NOUT )
  2 *
  3 *  -- LAPACK test routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       INTEGER            NIN, NOUT
  9 *     ..
 10 *
 11 *  Purpose
 12 *  =======
 13 *
 14 *  CCHKBL tests CGEBAL, a routine for balancing a general complex
 15 *  matrix and isolating some of its eigenvalues.
 16 *
 17 *  Arguments
 18 *  =========
 19 *
 20 *  NIN     (input) INTEGER
 21 *          The logical unit number for input.  NIN > 0.
 22 *
 23 *  NOUT    (input) INTEGER
 24 *          The logical unit number for output.  NOUT > 0.
 25 *
 26 * ======================================================================
 27 *
 28 *     .. Parameters ..
 29       INTEGER            LDA
 30       PARAMETER          ( LDA = 20 )
 31       REAL               ZERO
 32       PARAMETER          ( ZERO = 0.0E+0 )
 33 *     ..
 34 *     .. Local Scalars ..
 35       INTEGER            I, IHI, IHIIN, ILO, ILOIN, INFO, J, KNT, N,
 36      $                   NINFO
 37       REAL               ANORM, MEPS, RMAX, SFMIN, TEMP, VMAX
 38       COMPLEX            CDUM
 39 *     ..
 40 *     .. Local Arrays ..
 41       INTEGER            LMAX( 3 )
 42       REAL               DUMMY( 1 ), SCALE( LDA ), SCALIN( LDA )
 43       COMPLEX            A( LDA, LDA ), AIN( LDA, LDA )
 44 *     ..
 45 *     .. External Functions ..
 46       REAL               CLANGE, SLAMCH
 47       EXTERNAL           CLANGE, SLAMCH
 48 *     ..
 49 *     .. External Subroutines ..
 50       EXTERNAL           CGEBAL
 51 *     ..
 52 *     .. Intrinsic Functions ..
 53       INTRINSIC          ABSAIMAGMAX, REAL
 54 *     ..
 55 *     .. Statement Functions ..
 56       REAL               CABS1
 57 *     ..
 58 *     .. Statement Function definitions ..
 59       CABS1( CDUM ) = ABSREAL( CDUM ) ) + ABSAIMAG( CDUM ) )
 60 *     ..
 61 *     .. Executable Statements ..
 62 *
 63       LMAX( 1 ) = 0
 64       LMAX( 2 ) = 0
 65       LMAX( 3 ) = 0
 66       NINFO = 0
 67       KNT = 0
 68       RMAX = ZERO
 69       VMAX = ZERO
 70       SFMIN = SLAMCH( 'S' )
 71       MEPS = SLAMCH( 'E' )
 72 *
 73    10 CONTINUE
 74 *
 75       READ( NIN, FMT = * )N
 76       IF( N.EQ.0 )
 77      $   GO TO 70
 78       DO 20 I = 1, N
 79          READ( NIN, FMT = * )( A( I, J ), J = 1, N )
 80    20 CONTINUE
 81 *
 82       READ( NIN, FMT = * )ILOIN, IHIIN
 83       DO 30 I = 1, N
 84          READ( NIN, FMT = * )( AIN( I, J ), J = 1, N )
 85    30 CONTINUE
 86       READ( NIN, FMT = * )( SCALIN( I ), I = 1, N )
 87 *
 88       ANORM = CLANGE( 'M', N, N, A, LDA, DUMMY )
 89       KNT = KNT + 1
 90       CALL CGEBAL( 'B', N, A, LDA, ILO, IHI, SCALE, INFO )
 91 *
 92       IF( INFO.NE.0 ) THEN
 93          NINFO = NINFO + 1
 94          LMAX( 1 ) = KNT
 95       END IF
 96 *
 97       IF( ILO.NE.ILOIN .OR. IHI.NE.IHIIN ) THEN
 98          NINFO = NINFO + 1
 99          LMAX( 2 ) = KNT
100       END IF
101 *
102       DO 50 I = 1, N
103          DO 40 J = 1, N
104             TEMP = MAX( CABS1( A( I, J ) ), CABS1( AIN( I, J ) ) )
105             TEMP = MAX( TEMP, SFMIN )
106             VMAX = MAX( VMAX, CABS1( A( I, J )-AIN( I, J ) ) / TEMP )
107    40    CONTINUE
108    50 CONTINUE
109 *
110       DO 60 I = 1, N
111          TEMP = MAXSCALE( I ), SCALIN( I ) )
112          TEMP = MAX( TEMP, SFMIN )
113          VMAX = MAX( VMAX, ABSSCALE( I )-SCALIN( I ) ) / TEMP )
114    60 CONTINUE
115 *
116       IF( VMAX.GT.RMAX ) THEN
117          LMAX( 3 ) = KNT
118          RMAX = VMAX
119       END IF
120 *
121       GO TO 10
122 *
123    70 CONTINUE
124 *
125       WRITE( NOUT, FMT = 9999 )
126  9999 FORMAT1X'.. test output of CGEBAL .. ' )
127 *
128       WRITE( NOUT, FMT = 9998 )RMAX
129  9998 FORMAT1X'value of largest test error            = 'E12.3 )
130       WRITE( NOUT, FMT = 9997 )LMAX( 1 )
131  9997 FORMAT1X'example number where info is not zero  = ', I4 )
132       WRITE( NOUT, FMT = 9996 )LMAX( 2 )
133  9996 FORMAT1X'example number where ILO or IHI wrong  = ', I4 )
134       WRITE( NOUT, FMT = 9995 )LMAX( 3 )
135  9995 FORMAT1X'example number having largest error    = ', I4 )
136       WRITE( NOUT, FMT = 9994 )NINFO
137  9994 FORMAT1X'number of examples where info is not 0 = ', I4 )
138       WRITE( NOUT, FMT = 9993 )KNT
139  9993 FORMAT1X'total number of examples tested        = ', I4 )
140 *
141       RETURN
142 *
143 *     End of CCHKBL
144 *
145       END