1       SUBROUTINE ZCHKGL( 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 *  ZCHKGL tests ZGGBAL, a routine for balancing a matrix pair (A, B).
 15 *
 16 *  Arguments
 17 *  =========
 18 *
 19 *  NIN     (input) INTEGER
 20 *          The logical unit number for input.  NIN > 0.
 21 *
 22 *  NOUT    (input) INTEGER
 23 *          The logical unit number for output.  NOUT > 0.
 24 *
 25 *  =====================================================================
 26 *
 27 *     .. Parameters ..
 28       INTEGER            LDA, LDB, LWORK
 29       PARAMETER          ( LDA = 20, LDB = 20, LWORK = 6*LDA )
 30       DOUBLE PRECISION   ZERO
 31       PARAMETER          ( ZERO = 0.0D+0 )
 32 *     ..
 33 *     .. Local Scalars ..
 34       INTEGER            I, IHI, IHIIN, ILO, ILOIN, INFO, J, KNT, N,
 35      $                   NINFO
 36       DOUBLE PRECISION   ANORM, BNORM, EPS, RMAX, VMAX
 37 *     ..
 38 *     .. Local Arrays ..
 39       INTEGER            LMAX( 3 )
 40       DOUBLE PRECISION   LSCALE( LDA ), LSCLIN( LDA ), RSCALE( LDA ),
 41      $                   RSCLIN( LDA ), WORK( LWORK )
 42       COMPLEX*16         A( LDA, LDA ), AIN( LDA, LDA ), B( LDB, LDB ),
 43      $                   BIN( LDB, LDB )
 44 *     ..
 45 *     .. External Functions ..
 46       DOUBLE PRECISION   DLAMCH, ZLANGE
 47       EXTERNAL           DLAMCH, ZLANGE
 48 *     ..
 49 *     .. External Subroutines ..
 50       EXTERNAL           ZGGBAL
 51 *     ..
 52 *     .. Intrinsic Functions ..
 53       INTRINSIC          ABSMAX
 54 *     ..
 55 *     .. Executable Statements ..
 56 *
 57       LMAX( 1 ) = 0
 58       LMAX( 2 ) = 0
 59       LMAX( 3 ) = 0
 60       NINFO = 0
 61       KNT = 0
 62       RMAX = ZERO
 63 *
 64       EPS = DLAMCH( 'Precision' )
 65 *
 66    10 CONTINUE
 67 *
 68       READ( NIN, FMT = * )N
 69       IF( N.EQ.0 )
 70      $   GO TO 90
 71       DO 20 I = 1, N
 72          READ( NIN, FMT = * )( A( I, J ), J = 1, N )
 73    20 CONTINUE
 74 *
 75       DO 30 I = 1, N
 76          READ( NIN, FMT = * )( B( I, J ), J = 1, N )
 77    30 CONTINUE
 78 *
 79       READ( NIN, FMT = * )ILOIN, IHIIN
 80       DO 40 I = 1, N
 81          READ( NIN, FMT = * )( AIN( I, J ), J = 1, N )
 82    40 CONTINUE
 83       DO 50 I = 1, N
 84          READ( NIN, FMT = * )( BIN( I, J ), J = 1, N )
 85    50 CONTINUE
 86 *
 87       READ( NIN, FMT = * )( LSCLIN( I ), I = 1, N )
 88       READ( NIN, FMT = * )( RSCLIN( I ), I = 1, N )
 89 *
 90       ANORM = ZLANGE( 'M', N, N, A, LDA, WORK )
 91       BNORM = ZLANGE( 'M', N, N, B, LDB, WORK )
 92 *
 93       KNT = KNT + 1
 94 *
 95       CALL ZGGBAL( 'B', N, A, LDA, B, LDB, ILO, IHI, LSCALE, RSCALE,
 96      $             WORK, INFO )
 97 *
 98       IF( INFO.NE.0 ) THEN
 99          NINFO = NINFO + 1
100          LMAX( 1 ) = KNT
101       END IF
102 *
103       IF( ILO.NE.ILOIN .OR. IHI.NE.IHIIN ) THEN
104          NINFO = NINFO + 1
105          LMAX( 2 ) = KNT
106       END IF
107 *
108       VMAX = ZERO
109       DO 70 I = 1, N
110          DO 60 J = 1, N
111             VMAX = MAX( VMAX, ABS( A( I, J )-AIN( I, J ) ) )
112             VMAX = MAX( VMAX, ABS( B( I, J )-BIN( I, J ) ) )
113    60    CONTINUE
114    70 CONTINUE
115 *
116       DO 80 I = 1, N
117          VMAX = MAX( VMAX, ABS( LSCALE( I )-LSCLIN( I ) ) )
118          VMAX = MAX( VMAX, ABS( RSCALE( I )-RSCLIN( I ) ) )
119    80 CONTINUE
120 *
121       VMAX = VMAX / ( EPS*MAX( ANORM, BNORM ) )
122 *
123       IF( VMAX.GT.RMAX ) THEN
124          LMAX( 3 ) = KNT
125          RMAX = VMAX
126       END IF
127 *
128       GO TO 10
129 *
130    90 CONTINUE
131 *
132       WRITE( NOUT, FMT = 9999 )
133  9999 FORMAT' .. test output of ZGGBAL .. ' )
134 *
135       WRITE( NOUT, FMT = 9998 )RMAX
136  9998 FORMAT' ratio of largest test error              = 'D12.3 )
137       WRITE( NOUT, FMT = 9997 )LMAX( 1 )
138  9997 FORMAT' example number where info is not zero    = ', I4 )
139       WRITE( NOUT, FMT = 9996 )LMAX( 2 )
140  9996 FORMAT' example number where ILO or IHI is wrong = ', I4 )
141       WRITE( NOUT, FMT = 9995 )LMAX( 3 )
142  9995 FORMAT' example number having largest error      = ', I4 )
143       WRITE( NOUT, FMT = 9994 )NINFO
144  9994 FORMAT' number of examples where info is not 0   = ', I4 )
145       WRITE( NOUT, FMT = 9993 )KNT
146  9993 FORMAT' total number of examples tested          = ', I4 )
147 *
148       RETURN
149 *
150 *     End of ZCHKGL
151 *
152       END