276 SUBROUTINE slasd7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL,
277 $ VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ,
278 $ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
286 INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
288 REAL ALPHA, BETA, C, S
291 INTEGER GIVCOL( ldgcol, * ), IDX( * ), IDXP( * ),
292 $ idxq( * ), perm( * )
293 REAL D( * ), DSIGMA( * ), GIVNUM( ldgnum, * ),
294 $ vf( * ), vfw( * ), vl( * ), vlw( * ), z( * ),
301 REAL ZERO, ONE, TWO, EIGHT
302 parameter( zero = 0.0e+0, one = 1.0e+0, two = 2.0e+0,
307 INTEGER I, IDXI, IDXJ, IDXJP, J, JP, JPREV, K2, M, N,
309 REAL EPS, HLFTOL, TAU, TOL, Z1
316 EXTERNAL slamch, slapy2
329 IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) )
THEN 331 ELSE IF( nl.LT.1 )
THEN 333 ELSE IF( nr.LT.1 )
THEN 335 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN 337 ELSE IF( ldgcol.LT.n )
THEN 339 ELSE IF( ldgnum.LT.n )
THEN 343 CALL xerbla(
'SLASD7', -info )
349 IF( icompq.EQ.1 )
THEN 356 z1 = alpha*vl( nlp1 )
360 z( i+1 ) = alpha*vl( i )
364 idxq( i+1 ) = idxq( i ) + 1
371 z( i ) = beta*vf( i )
378 idxq( i ) = idxq( i ) + nlp1
384 dsigma( i ) = d( idxq( i ) )
385 zw( i ) = z( idxq( i ) )
386 vfw( i ) = vf( idxq( i ) )
387 vlw( i ) = vl( idxq( i ) )
390 CALL slamrg( nl, nr, dsigma( 2 ), 1, 1, idx( 2 ) )
394 d( i ) = dsigma( idxi )
396 vf( i ) = vfw( idxi )
397 vl( i ) = vlw( idxi )
402 eps = slamch(
'Epsilon' )
403 tol = max( abs( alpha ), abs( beta ) )
404 tol = eight*eight*eps*max( abs( d( n ) ), tol )
428 IF( abs( z( j ) ).LE.tol )
THEN 447 IF( abs( z( j ) ).LE.tol )
THEN 457 IF( abs( d( j )-d( jprev ) ).LE.tol )
THEN 475 IF( icompq.EQ.1 )
THEN 477 idxjp = idxq( idx( jprev )+1 )
478 idxj = idxq( idx( j )+1 )
479 IF( idxjp.LE.nlp1 )
THEN 482 IF( idxj.LE.nlp1 )
THEN 485 givcol( givptr, 2 ) = idxjp
486 givcol( givptr, 1 ) = idxj
487 givnum( givptr, 2 ) = c
488 givnum( givptr, 1 ) = s
490 CALL srot( 1, vf( jprev ), 1, vf( j ), 1, c, s )
491 CALL srot( 1, vl( jprev ), 1, vl( j ), 1, c, s )
498 dsigma( k ) = d( jprev )
510 dsigma( k ) = d( jprev )
521 dsigma( j ) = d( jp )
525 IF( icompq.EQ.1 )
THEN 528 perm( j ) = idxq( idx( jp )+1 )
529 IF( perm( j ).LE.nlp1 )
THEN 530 perm( j ) = perm( j ) - 1
538 CALL scopy( n-k, dsigma( k+1 ), 1, d( k+1 ), 1 )
545 IF( abs( dsigma( 2 ) ).LE.hlftol )
546 $ dsigma( 2 ) = hlftol
548 z( 1 ) = slapy2( z1, z( m ) )
549 IF( z( 1 ).LE.tol )
THEN 557 CALL srot( 1, vf( m ), 1, vf( 1 ), 1, c, s )
558 CALL srot( 1, vl( m ), 1, vl( 1 ), 1, c, s )
560 IF( abs( z1 ).LE.tol )
THEN 569 CALL scopy( k-1, zw( 2 ), 1, z( 2 ), 1 )
570 CALL scopy( n-1, vfw( 2 ), 1, vf( 2 ), 1 )
571 CALL scopy( n-1, vlw( 2 ), 1, vl( 2 ), 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine slasd7(ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL, VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ, PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM, C, S, INFO)
SLASD7 merges the two sets of singular values together into a single sorted set. Then it tries to def...
subroutine srot(N, SX, INCX, SY, INCY, C, S)
SROT
subroutine slamrg(N1, N2, A, STRD1, STRD2, INDEX)
SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...