312 SUBROUTINE slasd6( 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 REAL ALPHA, BETA, C, S
328 INTEGER GIVCOL( ldgcol, * ), IDXQ( * ), IWORK( * ),
330 REAL D( * ), DIFL( * ), DIFR( * ),
331 $ givnum( ldgnum, * ), poles( ldgnum, * ),
332 $ vf( * ), vl( * ), work( * ), z( * )
339 parameter( one = 1.0e+0, zero = 0.0e+0 )
342 INTEGER I, IDX, IDXC, IDXP, ISIGMA, IVFW, IVLW, IW, M,
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(
'SLASD6', -info )
393 orgnrm = max( abs( alpha ), abs( beta ) )
396 IF( abs( d( i ) ).GT.orgnrm )
THEN
397 orgnrm = abs( d( i ) )
400 CALL slascl(
'G', 0, 0, orgnrm, one, n, 1, d, n, info )
401 alpha = alpha / orgnrm
406 CALL slasd7( 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 slasd8( icompq, k, d, z, vf, vl, difl, difr, ldgnum,
415 $ work( isigma ), work( iw ), info )
420 CALL xerbla(
'SLASD8', -info )
426 IF( icompq.EQ.1 )
THEN
427 CALL scopy( k, d, 1, poles( 1, 1 ), 1 )
428 CALL scopy( k, work( isigma ), 1, poles( 1, 2 ), 1 )
433 CALL slascl(
'G', 0, 0, one, orgnrm, n, 1, d, n, info )
439 CALL slamrg( n1, n2, d, 1, -1, idxq )
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 slasd6(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)
SLASD6 computes the SVD of an updated upper bidiagonal matrix obtained by merging two smaller ones by...
subroutine slasd8(ICOMPQ, K, D, Z, VF, VL, DIFL, DIFR, LDDIFR, DSIGMA, WORK, INFO)
SLASD8 finds the square roots of the roots of the secular equation, and stores, for each element in D...
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
subroutine slascl(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO)
SLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.