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 )
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zgebal(JOB, N, A, LDA, ILO, IHI, SCALE, INFO)
ZGEBAL
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL