175 SUBROUTINE sggbal( JOB, N, A, LDA, B, LDB, ILO, IHI, LSCALE,
176 $ RSCALE, WORK, INFO )
184 INTEGER IHI, ILO, INFO, LDA, LDB, N
187 REAL A( LDA, * ), B( LDB, * ), LSCALE( * ),
188 $ rscale( * ), work( * )
195 parameter( zero = 0.0e+0, half = 0.5e+0, one = 1.0e+0 )
197 parameter( three = 3.0e+0, sclfac = 1.0e+1 )
200 INTEGER I, ICAB, IFLOW, IP1, IR, IRAB, IT, J, JC, JP1,
201 $ k, kount, l, lcab, lm1, lrab, lsfmax, lsfmin,
203 REAL ALPHA, BASL, BETA, CAB, CMAX, COEF, COEF2,
204 $ coef5, cor, ew, ewc, gamma, pgamma, rab, sfmax,
205 $ sfmin, sum, t, ta, tb, tc
211 EXTERNAL lsame, isamax, sdot, slamch
217 INTRINSIC abs, int, log10,
max,
min, real, sign
224 IF( .NOT.lsame( job, 'n.AND..NOT.
' ) LSAME( JOB, 'p.AND.
' )
225.NOT.
$ LSAME( JOB, 's.AND..NOT.
' ) LSAME( JOB, 'b
' ) ) THEN
227.LT.
ELSE IF( N0 ) THEN
229.LT.
ELSE IF( LDAMAX( 1, N ) ) THEN
231.LT.
ELSE IF( LDBMAX( 1, N ) ) THEN
235 CALL XERBLA( 'sggbal', -INFO )
255 IF( LSAME( JOB, 'n
' ) ) THEN
267 IF( LSAME( JOB, 's
' ) )
290.NE..OR..NE.
IF( A( I, J )ZERO B( I, J )ZERO )
298.NE..OR..NE.
IF( A( I, J )ZERO B( I, J )ZERO )
319.NE..OR..NE.
IF( A( I, J )ZERO B( I, J )ZERO )
326.NE..OR..NE.
IF( A( I, J )ZERO B( I, J )ZERO )
343 CALL SSWAP( N-K+1, A( I, K ), LDA, A( M, K ), LDA )
344 CALL SSWAP( N-K+1, B( I, K ), LDB, B( M, K ), LDB )
352 CALL SSWAP( L, A( 1, J ), 1, A( 1, M ), 1 )
353 CALL SSWAP( L, B( 1, J ), 1, B( 1, M ), 1 )
356 GO TO ( 20, 90 )IFLOW
362 IF( LSAME( JOB, 'p
' ) ) THEN
390 BASL = LOG10( SCLFAC )
397 TA = LOG10( ABS( TA ) ) / BASL
401 TB = LOG10( ABS( TB ) ) / BASL
403 WORK( I+4*N ) = WORK( I+4*N ) - TA - TB
404 WORK( J+5*N ) = WORK( J+5*N ) - TA - TB
408 COEF = ONE / REAL( 2*NR )
419 GAMMA = SDOT( NR, WORK( ILO+4*N ), 1, WORK( ILO+4*N ), 1 ) +
420 $ SDOT( NR, WORK( ILO+5*N ), 1, WORK( ILO+5*N ), 1 )
425 EW = EW + WORK( I+4*N )
426 EWC = EWC + WORK( I+5*N )
429 GAMMA = COEF*GAMMA - COEF2*( EW**2+EWC**2 ) - COEF5*( EW-EWC )**2
433 $ BETA = GAMMA / PGAMMA
434 T = COEF5*( EWC-THREE*EW )
435 TC = COEF5*( EW-THREE*EWC )
437 CALL SSCAL( NR, BETA, WORK( ILO ), 1 )
438 CALL SSCAL( NR, BETA, WORK( ILO+N ), 1 )
440 CALL SAXPY( NR, COEF, WORK( ILO+4*N ), 1, WORK( ILO+N ), 1 )
441 CALL SAXPY( NR, COEF, WORK( ILO+5*N ), 1, WORK( ILO ), 1 )
444 WORK( I ) = WORK( I ) + TC
445 WORK( I+N ) = WORK( I+N ) + T
454.EQ.
IF( A( I, J )ZERO )
457 SUM = SUM + WORK( J )
459.EQ.
IF( B( I, J )ZERO )
462 SUM = SUM + WORK( J )
464 WORK( I+2*N ) = REAL( KOUNT )*WORK( I+N ) + SUM
471.EQ.
IF( A( I, J )ZERO )
474 SUM = SUM + WORK( I+N )
476.EQ.
IF( B( I, J )ZERO )
479 SUM = SUM + WORK( I+N )
481 WORK( J+3*N ) = REAL( KOUNT )*WORK( J ) + SUM
484 SUM = SDOT( NR, WORK( ILO+N ), 1, WORK( ILO+2*N ), 1 ) +
485 $ SDOT( NR, WORK( ILO ), 1, WORK( ILO+3*N ), 1 )
492 COR = ALPHA*WORK( I+N )
493.GT.
IF( ABS( COR )CMAX )
495 LSCALE( I ) = LSCALE( I ) + COR
496 COR = ALPHA*WORK( I )
497.GT.
IF( ABS( COR )CMAX )
499 RSCALE( I ) = RSCALE( I ) + COR
504 CALL SAXPY( NR, -ALPHA, WORK( ILO+2*N ), 1, WORK( ILO+4*N ), 1 )
505 CALL SAXPY( NR, -ALPHA, WORK( ILO+3*N ), 1, WORK( ILO+5*N ), 1 )
515 SFMIN = SLAMCH( 's
' )
517 LSFMIN = INT( LOG10( SFMIN ) / BASL+ONE )
518 LSFMAX = INT( LOG10( SFMAX ) / BASL )
520 IRAB = ISAMAX( N-ILO+1, A( I, ILO ), LDA )
521 RAB = ABS( A( I, IRAB+ILO-1 ) )
522 IRAB = ISAMAX( N-ILO+1, B( I, ILO ), LDB )
523 RAB = MAX( RAB, ABS( B( I, IRAB+ILO-1 ) ) )
524 LRAB = INT( LOG10( RAB+SFMIN ) / BASL+ONE )
525 IR = LSCALE( I ) + SIGN( HALF, LSCALE( I ) )
526 IR = MIN( MAX( IR, LSFMIN ), LSFMAX, LSFMAX-LRAB )
527 LSCALE( I ) = SCLFAC**IR
528 ICAB = ISAMAX( IHI, A( 1, I ), 1 )
529 CAB = ABS( A( ICAB, I ) )
530 ICAB = ISAMAX( IHI, B( 1, I ), 1 )
531 CAB = MAX( CAB, ABS( B( ICAB, I ) ) )
532 LCAB = INT( LOG10( CAB+SFMIN ) / BASL+ONE )
533 JC = RSCALE( I ) + SIGN( HALF, RSCALE( I ) )
534 JC = MIN( MAX( JC, LSFMIN ), LSFMAX, LSFMAX-LCAB )
535 RSCALE( I ) = SCLFAC**JC
541 CALL SSCAL( N-ILO+1, LSCALE( I ), A( I, ILO ), LDA )
542 CALL SSCAL( N-ILO+1, LSCALE( I ), B( I, ILO ), LDB )
548 CALL SSCAL( IHI, RSCALE( J ), A( 1, J ), 1 )
549 CALL SSCAL( IHI, RSCALE( J ), B( 1, J ), 1 )
subroutine sggbal(job, n, a, lda, b, ldb, ilo, ihi, lscale, rscale, work, info)
SGGBAL