162 SUBROUTINE cgebal( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
171 INTEGER IHI, ILO, INFO, LDA, N
182 parameter( zero = 0.0e+0, one = 1.0e+0 )
184 parameter( sclfac = 2.0e+0 )
186 parameter( factor = 0.95e+0 )
190 INTEGER I, ICA, IEXC, IRA, J, K, L, M
191 REAL C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1,
195 LOGICAL SISNAN, LSAME
198 EXTERNAL sisnan, lsame, icamax, slamch, scnrm2
204 INTRINSIC abs, aimag, max, min, real
209 IF( .NOT.lsame( job,
'N' ) .AND. .NOT.lsame( job,
'P' ) .AND.
210 $ .NOT.lsame( job,
'S' ) .AND. .NOT.lsame( job,
'B' ) )
THEN 212 ELSE IF( n.LT.0 )
THEN 214 ELSE IF( lda.LT.max( 1, n ) )
THEN 218 CALL xerbla(
'CGEBAL', -info )
228 IF( lsame( job,
'N' ) )
THEN 235 IF( lsame( job,
'S' ) )
249 CALL cswap( l, a( 1, j ), 1, a( 1, m ), 1 )
250 CALL cswap( n-k+1, a( j, k ), lda, a( m, k ), lda )
268 IF(
REAL( A( J, I ) ).NE.zero .OR. aimag( A( j, i ) ).NE.
290 IF(
REAL( A( I, J ) ).NE.zero .OR. aimag( A( i, j ) ).NE.
304 IF( lsame( job,
'P' ) )
311 sfmin1 = slamch(
'S' ) / slamch(
'P' )
312 sfmax1 = one / sfmin1
313 sfmin2 = sfmin1*sclfac
314 sfmax2 = one / sfmin2
320 c = scnrm2( l-k+1, a( k, i ), 1 )
321 r = scnrm2( l-k+1, a( i , k ), lda )
322 ica = icamax( l, a( 1, i ), 1 )
323 ca = abs( a( ica, i ) )
324 ira = icamax( n-k+1, a( i, k ), lda )
325 ra = abs( a( i, ira+k-1 ) )
329 IF( c.EQ.zero .OR. r.EQ.zero )
335 IF( c.GE.g .OR. max( f, c, ca ).GE.sfmax2 .OR.
336 $ min( r, g, ra ).LE.sfmin2 )
GO TO 170
337 IF( sisnan( c+f+ca+r+g+ra ) )
THEN 342 CALL xerbla(
'CGEBAL', -info )
356 IF( g.LT.r .OR. max( r, ra ).GE.sfmax2 .OR.
357 $ min( f, c, g, ca ).LE.sfmin2 )
GO TO 190
369 IF( ( c+r ).GE.factor*s )
371 IF( f.LT.one .AND. scale( i ).LT.one )
THEN 372 IF( f*scale( i ).LE.sfmin1 )
375 IF( f.GT.one .AND. scale( i ).GT.one )
THEN 376 IF( scale( i ).GE.sfmax1 / f )
380 scale( i ) = scale( i )*f
383 CALL csscal( n-k+1, g, a( i, k ), lda )
384 CALL csscal( l, f, a( 1, i ), 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgebal(JOB, N, A, LDA, ILO, IHI, SCALE, INFO)
CGEBAL
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine csscal(N, SA, CX, INCX)
CSSCAL