312 SUBROUTINE dlasd6( ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA, BETA,
313 $ idxq, perm, givptr, givcol, ldgcol, givnum,
314 $ ldgnum, poles, difl, difr, z, k, c, s, work,
323 INTEGER GIVPTR, ICOMPQ, INFO, K, LDGCOL, LDGNUM, NL,
325 DOUBLE PRECISION ALPHA, BETA, C, S
328 INTEGER GIVCOL( ldgcol, * ), IDXQ( * ), IWORK( * ),
330 DOUBLE PRECISION D( * ), DIFL( * ), DIFR( * ),
331 $ givnum( ldgnum, * ), poles( ldgnum, * ),
332 $ vf( * ), vl( * ), work( * ), z( * )
338 DOUBLE PRECISION ONE, ZERO
339 parameter( one = 1.0d+0, zero = 0.0d+0 )
342 INTEGER I, IDX, IDXC, IDXP, ISIGMA, IVFW, IVLW, IW, M,
344 DOUBLE PRECISION ORGNRM
360 IF( ( icompq.LT.0 ) .OR. ( icompq.GT.1 ) )
THEN
362 ELSE IF( nl.LT.1 )
THEN
364 ELSE IF( nr.LT.1 )
THEN
366 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN
368 ELSE IF( ldgcol.LT.n )
THEN
370 ELSE IF( ldgnum.LT.n )
THEN
374 CALL xerbla(
'DLASD6', -info )
393 orgnrm = max( abs( alpha ), abs( beta ) )
396 IF( abs( d( i ) ).GT.orgnrm )
THEN
397 orgnrm = abs( d( i ) )
400 CALL dlascl(
'G', 0, 0, orgnrm, one, n, 1, d, n, info )
401 alpha = alpha / orgnrm
406 CALL dlasd7( icompq, nl, nr, sqre, k, d, z, work( iw ), vf,
407 $ work( ivfw ), vl, work( ivlw ), alpha, beta,
408 $ work( isigma ), iwork( idx ), iwork( idxp ), idxq,
409 $ perm, givptr, givcol, ldgcol, givnum, ldgnum, c, s,
414 CALL dlasd8( icompq, k, d, z, vf, vl, difl, difr, ldgnum,
415 $ work( isigma ), work( iw ), info )
420 CALL xerbla(
'DLASD8', -info )
426 IF( icompq.EQ.1 )
THEN
427 CALL dcopy( k, d, 1, poles( 1, 1 ), 1 )
428 CALL dcopy( k, work( isigma ), 1, poles( 1, 2 ), 1 )
433 CALL dlascl(
'G', 0, 0, one, orgnrm, n, 1, d, n, info )
439 CALL dlamrg( n1, n2, d, 1, -1, idxq )
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...
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine dlamrg(N1, N2, A, DTRD1, DTRD2, INDEX)
DLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...
subroutine xerbla(SRNAME, INFO)
XERBLA
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 dlasd8(ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDDIFR, DSIGMA, WORK, INFO)
DLASD8 finds the square roots of the roots of the secular equation, and stores, for each element in D...
subroutine dlasd6(ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA, BETA, IDXQ, PERM, GIVPTR, GIVCOL, LDGCOL, GIVNUM, LDGNUM, POLES, DIFL, DIFR, Z, K, C, S, WORK, IWORK, INFO)
DLASD6 computes the SVD of an updated upper bidiagonal matrix obtained by merging two smaller ones by...