163 SUBROUTINE zgebal( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
172 INTEGER IHI, ILO, INFO, LDA, N
175 DOUBLE PRECISION SCALE( * )
176 COMPLEX*16 A( LDA, * )
182 DOUBLE PRECISION ZERO, ONE
183 parameter( zero = 0.0d+0, one = 1.0d+0 )
184 DOUBLE PRECISION SCLFAC
185 parameter( sclfac = 2.0d+0 )
186 DOUBLE PRECISION FACTOR
187 parameter( factor = 0.95d+0 )
191 INTEGER I, ICA, IEXC, IRA, J, K, L, M
192 DOUBLE PRECISION C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1,
196 LOGICAL DISNAN, LSAME
198 DOUBLE PRECISION DLAMCH, DZNRM2
199 EXTERNAL disnan, lsame, izamax, dlamch, dznrm2
205 INTRINSIC abs, dble, dimag, max, min
210 IF( .NOT.lsame( job,
'N' ) .AND. .NOT.lsame( job,
'P' ) .AND.
211 $ .NOT.lsame( job,
'S' ) .AND. .NOT.lsame( job,
'B' ) )
THEN
213 ELSE IF( n.LT.0 )
THEN
215 ELSE IF( lda.LT.max( 1, n ) )
THEN
219 CALL xerbla(
'ZGEBAL', -info )
229 IF( lsame( job,
'N' ) )
THEN
236 IF( lsame( job,
'S' ) )
250 CALL zswap( l, a( 1, j ), 1, a( 1, m ), 1 )
251 CALL zswap( n-k+1, a( j, k ), lda, a( m, k ), lda )
269 IF( dble( a( j, i ) ).NE.zero .OR. dimag( a( j, i ) ).NE.
291 IF( dble( a( i, j ) ).NE.zero .OR. dimag( a( i, j ) ).NE.
305 IF( lsame( job,
'P' ) )
312 sfmin1 = dlamch(
'S' ) / dlamch(
'P' )
313 sfmax1 = one / sfmin1
314 sfmin2 = sfmin1*sclfac
315 sfmax2 = one / sfmin2
321 c = dznrm2( l-k+1, a( k, i ), 1 )
322 r = dznrm2( l-k+1, a( i, k ), lda )
323 ica = izamax( l, a( 1, i ), 1 )
324 ca = abs( a( ica, i ) )
325 ira = izamax( n-k+1, a( i, k ), lda )
326 ra = abs( a( i, ira+k-1 ) )
330 IF( c.EQ.zero .OR. r.EQ.zero )
336 IF( c.GE.g .OR. max( f, c, ca ).GE.sfmax2 .OR.
337 $ min( r, g, ra ).LE.sfmin2 )
GO TO 170
338 IF( disnan( c+f+ca+r+g+ra ) )
THEN
343 CALL xerbla(
'ZGEBAL', -info )
357 IF( g.LT.r .OR. max( r, ra ).GE.sfmax2 .OR.
358 $ min( f, c, g, ca ).LE.sfmin2 )
GO TO 190
370 IF( ( c+r ).GE.factor*s )
372 IF( f.LT.one .AND. scale( i ).LT.one )
THEN
373 IF( f*scale( i ).LE.sfmin1 )
376 IF( f.GT.one .AND. scale( i ).GT.one )
THEN
377 IF( scale( i ).GE.sfmax1 / f )
381 scale( i ) = scale( i )*f
384 CALL zdscal( n-k+1, g, a( i, k ), lda )
385 CALL zdscal( l, f, a( 1, i ), 1 )