274 SUBROUTINE dlasd7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW,
276 $ VLW, ALPHA, BETA, DSIGMA, IDX, IDXP, IDXQ,
277 $ PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM,
285 INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
287 DOUBLE PRECISION ALPHA, BETA, C, S
290 INTEGER GIVCOL( LDGCOL, * ), IDX( * ), IDXP( * ),
291 $ idxq( * ), perm( * )
292 DOUBLE PRECISION D( * ), DSIGMA( * ), GIVNUM( LDGNUM, * ),
293 $ VF( * ), VFW( * ), VL( * ), VLW( * ), Z( * ),
300 DOUBLE PRECISION ZERO, ONE, TWO, EIGHT
301 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0, two = 2.0d+0,
306 INTEGER I, IDXI, IDXJ, IDXJP, J, JP, JPREV, K2, M, N,
308 DOUBLE PRECISION EPS, HLFTOL, TAU, TOL, Z1
314 DOUBLE PRECISION DLAMCH, DLAPY2
315 EXTERNAL dlamch, dlapy2
328 IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) )
THEN
330 ELSE IF( nl.LT.1 )
THEN
332 ELSE IF( nr.LT.1 )
THEN
334 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN
336 ELSE IF( ldgcol.LT.n )
THEN
338 ELSE IF( ldgnum.LT.n )
THEN
342 CALL xerbla(
'DLASD7', -info )
348 IF( icompq.EQ.1 )
THEN
355 z1 = alpha*vl( nlp1 )
359 z( i+1 ) = alpha*vl( i )
363 idxq( i+1 ) = idxq( i ) + 1
370 z( i ) = beta*vf( i )
377 idxq( i ) = idxq( i ) + nlp1
383 dsigma( i ) = d( idxq( i ) )
384 zw( i ) = z( idxq( i ) )
385 vfw( i ) = vf( idxq( i ) )
386 vlw( i ) = vl( idxq( i ) )
389 CALL dlamrg( nl, nr, dsigma( 2 ), 1, 1, idx( 2 ) )
393 d( i ) = dsigma( idxi )
395 vf( i ) = vfw( idxi )
396 vl( i ) = vlw( idxi )
401 eps = dlamch(
'Epsilon' )
402 tol = max( abs( alpha ), abs( beta ) )
403 tol = eight*eight*eps*max( abs( d( n ) ), tol )
427 IF( abs( z( j ) ).LE.tol )
THEN
446 IF( abs( z( j ) ).LE.tol )
THEN
456 IF( abs( d( j )-d( jprev ) ).LE.tol )
THEN
474 IF( icompq.EQ.1 )
THEN
476 idxjp = idxq( idx( jprev )+1 )
477 idxj = idxq( idx( j )+1 )
478 IF( idxjp.LE.nlp1 )
THEN
481 IF( idxj.LE.nlp1 )
THEN
484 givcol( givptr, 2 ) = idxjp
485 givcol( givptr, 1 ) = idxj
486 givnum( givptr, 2 ) = c
487 givnum( givptr, 1 ) = s
489 CALL drot( 1, vf( jprev ), 1, vf( j ), 1, c, s )
490 CALL drot( 1, vl( jprev ), 1, vl( j ), 1, c, s )
497 dsigma( k ) = d( jprev )
509 dsigma( k ) = d( jprev )
520 dsigma( j ) = d( jp )
524 IF( icompq.EQ.1 )
THEN
527 perm( j ) = idxq( idx( jp )+1 )
528 IF( perm( j ).LE.nlp1 )
THEN
529 perm( j ) = perm( j ) - 1
537 CALL dcopy( n-k, dsigma( k+1 ), 1, d( k+1 ), 1 )
544 IF( abs( dsigma( 2 ) ).LE.hlftol )
545 $ dsigma( 2 ) = hlftol
547 z( 1 ) = dlapy2( z1, z( m ) )
548 IF( z( 1 ).LE.tol )
THEN
556 CALL drot( 1, vf( m ), 1, vf( 1 ), 1, c, s )
557 CALL drot( 1, vl( m ), 1, vl( 1 ), 1, c, s )
559 IF( abs( z1 ).LE.tol )
THEN
568 CALL dcopy( k-1, zw( 2 ), 1, z( 2 ), 1 )
569 CALL dcopy( n-1, vfw( 2 ), 1, vf( 2 ), 1 )
570 CALL dcopy( n-1, vlw( 2 ), 1, vl( 2 ), 1 )
subroutine dlasd7(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)
DLASD7 merges the two sets of singular values together into a single sorted set. Then it tries to def...