93      DOUBLE PRECISION   D( * ), E( * )
 
   99      DOUBLE PRECISION   ZERO, ONE, TWO, THREE
 
  100      parameter( zero = 0.0d0, one = 1.0d0, two = 2.0d0,
 
  103      parameter( maxit = 30 )
 
  106      INTEGER            I, ISCALE, JTOT, L, L1, LEND, LENDSV, LSV, M,
 
  108      DOUBLE PRECISION   ALPHA, ANORM, BB, C, EPS, EPS2, GAMMA, OLDC,
 
  109     $                   OLDGAM, P, R, RT1, RT2, RTE, S, SAFMAX, SAFMIN,
 
  110     $                   SIGMA, SSFMAX, SSFMIN, RMAX
 
  113      DOUBLE PRECISION   DLAMCH, DLANST, DLAPY2
 
  114      EXTERNAL           dlamch, dlanst, dlapy2
 
  120      INTRINSIC          abs, sign, sqrt
 
  132         CALL xerbla( 
'DSTERF', -info )
 
  142      safmin = dlamch( 
'S' )
 
  143      safmax = one / safmin
 
  144      ssfmax = sqrt( safmax ) / three
 
  145      ssfmin = sqrt( safmin ) / eps2
 
  166         IF( abs( e( m ) ).LE.( sqrt( abs( d( m ) ) )*sqrt( abs( d( m+
 
  167     $       1 ) ) ) )*eps ) 
THEN 
  185      anorm = dlanst( 
'M', lend-l+1, d( l ), e( l ) )
 
  189      IF( (anorm.GT.ssfmax) ) 
THEN 
  191         CALL dlascl( 
'G', 0, 0, anorm, ssfmax, lend-l+1, 1, d( l ),
 
  194         CALL dlascl( 
'G', 0, 0, anorm, ssfmax, lend-l, 1, e( l ), n,
 
  196      ELSE IF( anorm.LT.ssfmin ) 
THEN 
  198         CALL dlascl( 
'G', 0, 0, anorm, ssfmin, lend-l+1, 1, d( l ),
 
  201         CALL dlascl( 
'G', 0, 0, anorm, ssfmin, lend-l, 1, e( l ), n,
 
  205      DO 40 i = l, lend - 1
 
  211      IF( abs( d( lend ) ).LT.abs( d( l ) ) ) 
THEN 
  224            DO 60 m = l, lend - 1
 
  225               IF( abs( e( m ) ).LE.eps2*abs( d( m )*d( m+1 ) ) )
 
  243            CALL dlae2( d( l ), rte, d( l+1 ), rt1, rt2 )
 
  260         sigma = ( d( l+1 )-p ) / ( two*rte )
 
  261         r = dlapy2( sigma, one )
 
  262         sigma = p - ( rte / ( sigma+sign( r, sigma ) ) )
 
  266         gamma = d( m ) - sigma
 
  271         DO 80 i = m - 1, l, -1
 
  281            gamma = c*( alpha-sigma ) - s*oldgam
 
  282            d( i+1 ) = oldgam + ( alpha-gamma )
 
  284               p = ( gamma*gamma ) / c
 
  291         d( l ) = sigma + gamma
 
  311         DO 110 m = l, lend + 1, -1
 
  312            IF( abs( e( m-1 ) ).LE.eps2*abs( d( m )*d( m-1 ) ) )
 
  328            rte = sqrt( e( l-1 ) )
 
  329            CALL dlae2( d( l ), rte, d( l-1 ), rt1, rt2 )
 
  345         rte = sqrt( e( l-1 ) )
 
  346         sigma = ( d( l-1 )-p ) / ( two*rte )
 
  347         r = dlapy2( sigma, one )
 
  348         sigma = p - ( rte / ( sigma+sign( r, sigma ) ) )
 
  352         gamma = d( m ) - sigma
 
  367            gamma = c*( alpha-sigma ) - s*oldgam
 
  368            d( i ) = oldgam + ( alpha-gamma )
 
  370               p = ( gamma*gamma ) / c
 
  377         d( l ) = sigma + gamma
 
  396     $   
CALL dlascl( 
'G', 0, 0, ssfmax, anorm, lendsv-lsv+1, 1,
 
  397     $                d( lsv ), n, info )
 
  399     $   
CALL dlascl( 
'G', 0, 0, ssfmin, anorm, lendsv-lsv+1, 1,
 
  400     $                d( lsv ), n, info )
 
  416      CALL dlasrt( 
'I', n, d, info )
 
 
subroutine dlascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
DLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.