1       SUBROUTINE DCHKBL( 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 *  DCHKBL tests DGEBAL, a routine for balancing a general real
 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       DOUBLE PRECISION   ZERO
 32       PARAMETER          ( ZERO = 0.0D+0 )
 33 *     ..
 34 *     .. Local Scalars ..
 35       INTEGER            I, IHI, IHIIN, ILO, ILOIN, INFO, J, KNT, N,
 36      $                   NINFO
 37       DOUBLE PRECISION   ANORM, MEPS, RMAX, SFMIN, TEMP, VMAX
 38 *     ..
 39 *     .. Local Arrays ..
 40       INTEGER            LMAX( 3 )
 41       DOUBLE PRECISION   A( LDA, LDA ), AIN( LDA, LDA ), DUMMY( 1 ),
 42      $                   SCALE( LDA ), SCALIN( LDA )
 43 *     ..
 44 *     .. External Functions ..
 45       DOUBLE PRECISION   DLAMCH, DLANGE
 46       EXTERNAL           DLAMCH, DLANGE
 47 *     ..
 48 *     .. External Subroutines ..
 49       EXTERNAL           DGEBAL
 50 *     ..
 51 *     .. Intrinsic Functions ..
 52       INTRINSIC          ABSMAX
 53 *     ..
 54 *     .. Executable Statements ..
 55 *
 56       LMAX( 1 ) = 0
 57       LMAX( 2 ) = 0
 58       LMAX( 3 ) = 0
 59       NINFO = 0
 60       KNT = 0
 61       RMAX = ZERO
 62       VMAX = ZERO
 63       SFMIN = DLAMCH( 'S' )
 64       MEPS = DLAMCH( 'E' )
 65 *
 66    10 CONTINUE
 67 *
 68       READ( NIN, FMT = * )N
 69       IF( N.EQ.0 )
 70      $   GO TO 70
 71       DO 20 I = 1, N
 72          READ( NIN, FMT = * )( A( I, J ), J = 1, N )
 73    20 CONTINUE
 74 *
 75       READ( NIN, FMT = * )ILOIN, IHIIN
 76       DO 30 I = 1, N
 77          READ( NIN, FMT = * )( AIN( I, J ), J = 1, N )
 78    30 CONTINUE
 79       READ( NIN, FMT = * )( SCALIN( I ), I = 1, N )
 80 *
 81       ANORM = DLANGE( 'M', N, N, A, LDA, DUMMY )
 82       KNT = KNT + 1
 83 *
 84       CALL DGEBAL( 'B', N, A, LDA, ILO, IHI, SCALE, INFO )
 85 *
 86       IF( INFO.NE.0 ) THEN
 87          NINFO = NINFO + 1
 88          LMAX( 1 ) = KNT
 89       END IF
 90 *
 91       IF( ILO.NE.ILOIN .OR. IHI.NE.IHIIN ) THEN
 92          NINFO = NINFO + 1
 93          LMAX( 2 ) = KNT
 94       END IF
 95 *
 96       DO 50 I = 1, N
 97          DO 40 J = 1, N
 98             TEMP = MAX( A( I, J ), AIN( I, J ) )
 99             TEMP = MAX( TEMP, SFMIN )
100             VMAX = MAX( VMAX, ABS( A( I, J )-AIN( I, J ) ) / TEMP )
101    40    CONTINUE
102    50 CONTINUE
103 *
104       DO 60 I = 1, N
105          TEMP = MAXSCALE( I ), SCALIN( I ) )
106          TEMP = MAX( TEMP, SFMIN )
107          VMAX = MAX( VMAX, ABSSCALE( I )-SCALIN( I ) ) / TEMP )
108    60 CONTINUE
109 *
110 *
111       IF( VMAX.GT.RMAX ) THEN
112          LMAX( 3 ) = KNT
113          RMAX = VMAX
114       END IF
115 *
116       GO TO 10
117 *
118    70 CONTINUE
119 *
120       WRITE( NOUT, FMT = 9999 )
121  9999 FORMAT1X'.. test output of DGEBAL .. ' )
122 *
123       WRITE( NOUT, FMT = 9998 )RMAX
124  9998 FORMAT1X'value of largest test error            = 'D12.3 )
125       WRITE( NOUT, FMT = 9997 )LMAX( 1 )
126  9997 FORMAT1X'example number where info is not zero  = ', I4 )
127       WRITE( NOUT, FMT = 9996 )LMAX( 2 )
128  9996 FORMAT1X'example number where ILO or IHI wrong  = ', I4 )
129       WRITE( NOUT, FMT = 9995 )LMAX( 3 )
130  9995 FORMAT1X'example number having largest error    = ', I4 )
131       WRITE( NOUT, FMT = 9994 )NINFO
132  9994 FORMAT1X'number of examples where info is not 0 = ', I4 )
133       WRITE( NOUT, FMT = 9993 )KNT
134  9993 FORMAT1X'total number of examples tested        = ', I4 )
135 *
136       RETURN
137 *
138 *     End of DCHKBL
139 *
140       END