159 SUBROUTINE sgebal( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
167 INTEGER IHI, ILO, INFO, LDA, N
170 REAL A( LDA, * ), SCALE( * )
177 parameter( zero = 0.0e+0, one = 1.0e+0 )
179 parameter( sclfac = 2.0e+0 )
181 parameter( factor = 0.95e+0 )
185 INTEGER I, ICA, IEXC, IRA, J, K, L, M
186 REAL C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1,
190 LOGICAL SISNAN, LSAME
193 EXTERNAL sisnan, lsame, isamax, slamch, snrm2
199 INTRINSIC abs, max, min
204 IF( .NOT.lsame( job,
'N' ) .AND. .NOT.lsame( job,
'P' ) .AND.
205 $ .NOT.lsame( job,
'S' ) .AND. .NOT.lsame( job,
'B' ) )
THEN
207 ELSE IF( n.LT.0 )
THEN
209 ELSE IF( lda.LT.max( 1, n ) )
THEN
213 CALL xerbla(
'SGEBAL', -info )
223 IF( lsame( job,
'N' ) )
THEN
230 IF( lsame( job,
'S' ) )
244 CALL sswap( l, a( 1, j ), 1, a( 1, m ), 1 )
245 CALL sswap( n-k+1, a( j, k ), lda, a( m, k ), lda )
263 IF( a( j, i ).NE.zero )
285 IF( a( i, j ).NE.zero )
299 IF( lsame( job,
'P' ) )
306 sfmin1 = slamch(
'S' ) / slamch(
'P' )
307 sfmax1 = one / sfmin1
308 sfmin2 = sfmin1*sclfac
309 sfmax2 = one / sfmin2
315 c = snrm2( l-k+1, a( k, i ), 1 )
316 r = snrm2( l-k+1, a( i, k ), lda )
317 ica = isamax( l, a( 1, i ), 1 )
318 ca = abs( a( ica, i ) )
319 ira = isamax( n-k+1, a( i, k ), lda )
320 ra = abs( a( i, ira+k-1 ) )
324 IF( c.EQ.zero .OR. r.EQ.zero )
330 IF( c.GE.g .OR. max( f, c, ca ).GE.sfmax2 .OR.
331 $ min( r, g, ra ).LE.sfmin2 )
GO TO 170
343 IF( g.LT.r .OR. max( r, ra ).GE.sfmax2 .OR.
344 $ min( f, c, g, ca ).LE.sfmin2 )
GO TO 190
345 IF( sisnan( c+f+ca+r+g+ra ) )
THEN
350 CALL xerbla(
'SGEBAL', -info )
364 IF( ( c+r ).GE.factor*s )
366 IF( f.LT.one .AND. scale( i ).LT.one )
THEN
367 IF( f*scale( i ).LE.sfmin1 )
370 IF( f.GT.one .AND. scale( i ).GT.one )
THEN
371 IF( scale( i ).GE.sfmax1 / f )
375 scale( i ) = scale( i )*f
378 CALL sscal( n-k+1, g, a( i, k ), lda )
379 CALL sscal( l, f, a( 1, i ), 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sgebal(JOB, N, A, LDA, ILO, IHI, SCALE, INFO)
SGEBAL
subroutine sswap(N, SX, INCX, SY, INCY)
SSWAP
subroutine sscal(N, SA, SX, INCX)
SSCAL