115      DOUBLE PRECISION   D( * ), E( * ), WORK( * )
 
  121      DOUBLE PRECISION   ZERO
 
  122      parameter( zero = 0.0d0 )
 
  126      DOUBLE PRECISION   EPS, SCALE, SAFMIN, SIGMN, SIGMX
 
  133      DOUBLE PRECISION   DLAMCH
 
  137      INTRINSIC          abs, max, sqrt
 
  144         CALL xerbla( 
'DLASQ1', -info )
 
  146      ELSE IF( n.EQ.0 ) 
THEN 
  148      ELSE IF( n.EQ.1 ) 
THEN 
  149         d( 1 ) = abs( d( 1 ) )
 
  151      ELSE IF( n.EQ.2 ) 
THEN 
  152         CALL dlas2( d( 1 ), e( 1 ), d( 2 ), sigmn, sigmx )
 
  162         d( i ) = abs( d( i ) )
 
  163         sigmx = max( sigmx, abs( e( i ) ) )
 
  165      d( n ) = abs( d( n ) )
 
  169      IF( sigmx.EQ.zero ) 
THEN 
  170         CALL dlasrt( 
'D', n, d, iinfo )
 
  175         sigmx = max( sigmx, d( i ) )
 
  181      eps = dlamch( 
'Precision' )
 
  182      safmin = dlamch( 
'Safe minimum' )
 
  183      scale = sqrt( eps / safmin )
 
  184      CALL dcopy( n, d, 1, work( 1 ), 2 )
 
  185      CALL dcopy( n-1, e, 1, work( 2 ), 2 )
 
  186      CALL dlascl( 
'G', 0, 0, sigmx, scale, 2*n-1, 1, work, 2*n-1,
 
  192         work( i ) = work( i )**2
 
  196      CALL dlasq2( n, work, info )
 
  200            d( i ) = sqrt( work( i ) )
 
  202         CALL dlascl( 
'G', 0, 0, scale, sigmx, n, 1, d, n, iinfo )
 
  203      ELSE IF( info.EQ.2 ) 
THEN 
  209            d( i ) = sqrt( work( 2*i-1 ) )
 
  210            e( i ) = sqrt( work( 2*i ) )
 
  212         CALL dlascl( 
'G', 0, 0, scale, sigmx, n, 1, d, n, iinfo )
 
  213         CALL dlascl( 
'G', 0, 0, scale, sigmx, n, 1, e, n, iinfo )
 
 
subroutine dlas2(f, g, h, ssmin, ssmax)
DLAS2 computes singular values of a 2-by-2 triangular matrix.
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.
subroutine dlasq1(n, d, e, work, info)
DLASQ1 computes the singular values of a real square bidiagonal matrix. Used by sbdsqr.
subroutine dlasq2(n, z, info)
DLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated ...
subroutine dlasrt(id, n, d, info)
DLASRT sorts numbers in increasing or decreasing order.