311 SUBROUTINE dlasd6( ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA, BETA,
312 $ IDXQ, PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM,
313 $ LDGNUM, POLES, DIFL, DIFR, Z, K, C, S, WORK,
322 INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
324 DOUBLE PRECISION ALPHA, BETA, C, S
327 INTEGER GIVCOL( LDGCOL, * ), IDXQ( * ), IWORK( * ),
329 DOUBLE PRECISION D( * ), DIFL( * ), DIFR( * ),
330 $ givnum( ldgnum, * ), poles( ldgnum, * ),
331 $ vf( * ), vl( * ), work( * ), z( * )
337 DOUBLE PRECISION ONE, ZERO
338 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
341 INTEGER I, IDX, IDXC, IDXP, ISIGMA, IVFW, IVLW, IW, M,
343 DOUBLE PRECISION ORGNRM
359 IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) )
THEN
361 ELSE IF( nl.LT.1 )
THEN
363 ELSE IF( nr.LT.1 )
THEN
365 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN
367 ELSE IF( ldgcol.LT.n )
THEN
369 ELSE IF( ldgnum.LT.n )
THEN
373 CALL xerbla(
'DLASD6', -info )
392 orgnrm = max( abs( alpha ), abs( beta ) )
395 IF( abs( d( i ) ).GT.orgnrm )
THEN
396 orgnrm = abs( d( i ) )
399 CALL dlascl(
'G', 0, 0, orgnrm, one, n, 1, d, n, info )
400 alpha = alpha / orgnrm
405 CALL dlasd7( icompq, nl, nr, sqre, k, d, z, work( iw ), vf,
406 $ work( ivfw ), vl, work( ivlw ), alpha, beta,
407 $ work( isigma ), iwork( idx ), iwork( idxp ), idxq,
408 $ perm, givptr, givcol, ldgcol, givnum, ldgnum, c, s,
413 CALL dlasd8( icompq, k, d, z, vf, vl, difl, difr, ldgnum,
414 $ work( isigma ), work( iw ), info )
424 IF( icompq.EQ.1 )
THEN
425 CALL dcopy( k, d, 1, poles( 1, 1 ), 1 )
426 CALL dcopy( k, work( isigma ), 1, poles( 1, 2 ), 1 )
431 CALL dlascl(
'G', 0, 0, one, orgnrm, n, 1, d, n, info )
437 CALL dlamrg( n1, n2, d, 1, -1, idxq )