161 SUBROUTINE zgebal( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
169 INTEGER IHI, ILO, INFO, LDA, N
172 DOUBLE PRECISION SCALE( * )
173 COMPLEX*16 A( LDA, * )
179 DOUBLE PRECISION ZERO, ONE
180 parameter( zero = 0.0d+0, one = 1.0d+0 )
181 DOUBLE PRECISION SCLFAC
182 parameter( sclfac = 2.0d+0 )
183 DOUBLE PRECISION FACTOR
184 parameter( factor = 0.95d+0 )
188 INTEGER I, ICA, IEXC, IRA, J, K, L, M
189 DOUBLE PRECISION C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1,
193 LOGICAL DISNAN, LSAME
195 DOUBLE PRECISION DLAMCH, DZNRM2
196 EXTERNAL disnan, lsame, izamax, dlamch, dznrm2
202 INTRINSIC abs, dble, dimag, max, min
207 IF( .NOT.lsame( job,
'N' ) .AND. .NOT.lsame( job,
'P' ) .AND.
208 $ .NOT.lsame( job,
'S' ) .AND. .NOT.lsame( job,
'B' ) )
THEN
210 ELSE IF( n.LT.0 )
THEN
212 ELSE IF( lda.LT.max( 1, n ) )
THEN
216 CALL xerbla(
'ZGEBAL', -info )
226 IF( lsame( job,
'N' ) )
THEN
233 IF( lsame( job,
'S' ) )
247 CALL zswap( l, a( 1, j ), 1, a( 1, m ), 1 )
248 CALL zswap( n-k+1, a( j, k ), lda, a( m, k ), lda )
266 IF( dble( a( j, i ) ).NE.zero .OR. dimag( a( j, i ) ).NE.
288 IF( dble( a( i, j ) ).NE.zero .OR. dimag( a( i, j ) ).NE.
302 IF( lsame( job,
'P' ) )
309 sfmin1 = dlamch(
'S' ) / dlamch(
'P' )
310 sfmax1 = one / sfmin1
311 sfmin2 = sfmin1*sclfac
312 sfmax2 = one / sfmin2
318 c = dznrm2( l-k+1, a( k, i ), 1 )
319 r = dznrm2( l-k+1, a( i, k ), lda )
320 ica = izamax( l, a( 1, i ), 1 )
321 ca = abs( a( ica, i ) )
322 ira = izamax( n-k+1, a( i, k ), lda )
323 ra = abs( a( i, ira+k-1 ) )
327 IF( c.EQ.zero .OR. r.EQ.zero )
333 IF( c.GE.g .OR. max( f, c, ca ).GE.sfmax2 .OR.
334 $ min( r, g, ra ).LE.sfmin2 )
GO TO 170
335 IF( disnan( c+f+ca+r+g+ra ) )
THEN
340 CALL xerbla(
'ZGEBAL', -info )
354 IF( g.LT.r .OR. max( r, ra ).GE.sfmax2 .OR.
355 $ min( f, c, g, ca ).LE.sfmin2 )
GO TO 190
367 IF( ( c+r ).GE.factor*s )
369 IF( f.LT.one .AND. scale( i ).LT.one )
THEN
370 IF( f*scale( i ).LE.sfmin1 )
373 IF( f.GT.one .AND. scale( i ).GT.one )
THEN
374 IF( scale( i ).GE.sfmax1 / f )
378 scale( i ) = scale( i )*f
381 CALL zdscal( n-k+1, g, a( i, k ), lda )
382 CALL zdscal( l, f, a( 1, i ), 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine zgebal(JOB, N, A, LDA, ILO, IHI, SCALE, INFO)
ZGEBAL