278 SUBROUTINE slasd7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL,
279 $ VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ,
280 $ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
289 INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
291 REAL ALPHA, BETA, C, S
294 INTEGER GIVCOL( ldgcol, * ), IDX( * ), IDXP( * ),
295 $ idxq( * ), perm( * )
296 REAL D( * ), DSIGMA( * ), GIVNUM( ldgnum, * ),
297 $ vf( * ), vfw( * ), vl( * ), vlw( * ), z( * ),
304 REAL ZERO, ONE, TWO, EIGHT
305 parameter( zero = 0.0e+0, one = 1.0e+0, two = 2.0e+0,
310 INTEGER I, IDXI, IDXJ, IDXJP, J, JP, JPREV, K2, M, N,
312 REAL EPS, HLFTOL, TAU, TOL, Z1
319 EXTERNAL slamch, slapy2
332 IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) )
THEN 334 ELSE IF( nl.LT.1 )
THEN 336 ELSE IF( nr.LT.1 )
THEN 338 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN 340 ELSE IF( ldgcol.LT.n )
THEN 342 ELSE IF( ldgnum.LT.n )
THEN 346 CALL xerbla(
'SLASD7', -info )
352 IF( icompq.EQ.1 )
THEN 359 z1 = alpha*vl( nlp1 )
363 z( i+1 ) = alpha*vl( i )
367 idxq( i+1 ) = idxq( i ) + 1
374 z( i ) = beta*vf( i )
381 idxq( i ) = idxq( i ) + nlp1
387 dsigma( i ) = d( idxq( i ) )
388 zw( i ) = z( idxq( i ) )
389 vfw( i ) = vf( idxq( i ) )
390 vlw( i ) = vl( idxq( i ) )
393 CALL slamrg( nl, nr, dsigma( 2 ), 1, 1, idx( 2 ) )
397 d( i ) = dsigma( idxi )
399 vf( i ) = vfw( idxi )
400 vl( i ) = vlw( idxi )
405 eps = slamch(
'Epsilon' )
406 tol = max( abs( alpha ), abs( beta ) )
407 tol = eight*eight*eps*max( abs( d( n ) ), tol )
431 IF( abs( z( j ) ).LE.tol )
THEN 450 IF( abs( z( j ) ).LE.tol )
THEN 460 IF( abs( d( j )-d( jprev ) ).LE.tol )
THEN 478 IF( icompq.EQ.1 )
THEN 480 idxjp = idxq( idx( jprev )+1 )
481 idxj = idxq( idx( j )+1 )
482 IF( idxjp.LE.nlp1 )
THEN 485 IF( idxj.LE.nlp1 )
THEN 488 givcol( givptr, 2 ) = idxjp
489 givcol( givptr, 1 ) = idxj
490 givnum( givptr, 2 ) = c
491 givnum( givptr, 1 ) = s
493 CALL srot( 1, vf( jprev ), 1, vf( j ), 1, c, s )
494 CALL srot( 1, vl( jprev ), 1, vl( j ), 1, c, s )
501 dsigma( k ) = d( jprev )
513 dsigma( k ) = d( jprev )
524 dsigma( j ) = d( jp )
528 IF( icompq.EQ.1 )
THEN 531 perm( j ) = idxq( idx( jp )+1 )
532 IF( perm( j ).LE.nlp1 )
THEN 533 perm( j ) = perm( j ) - 1
541 CALL scopy( n-k, dsigma( k+1 ), 1, d( k+1 ), 1 )
548 IF( abs( dsigma( 2 ) ).LE.hlftol )
549 $ dsigma( 2 ) = hlftol
551 z( 1 ) = slapy2( z1, z( m ) )
552 IF( z( 1 ).LE.tol )
THEN 560 CALL srot( 1, vf( m ), 1, vf( 1 ), 1, c, s )
561 CALL srot( 1, vl( m ), 1, vl( 1 ), 1, c, s )
563 IF( abs( z1 ).LE.tol )
THEN 572 CALL scopy( k-1, zw( 2 ), 1, z( 2 ), 1 )
573 CALL scopy( n-1, vfw( 2 ), 1, vf( 2 ), 1 )
574 CALL scopy( n-1, vlw( 2 ), 1, vl( 2 ), 1 )
subroutine srot(N, SX, INCX, SY, INCY, C, S)
SROT
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 slamrg(N1, N2, A, STRD1, STRD2, INDEX)
SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY