209 SUBROUTINE slasdq( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT,
210 $ U, LDU, C, LDC, WORK, INFO )
218 INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU, SQRE
221 REAL C( LDC, * ), D( * ), E( * ), U( LDU, * ),
222 $ vt( ldvt, * ), work( * )
229 parameter( zero = 0.0e+0 )
233 INTEGER I, ISUB, , J, NP1, SQRE1
252 IF( lsame( uplo,
'U' ) )
254 IF( lsame( uplo,
'L' ) )
256 IF( iuplo.EQ.0 )
THEN
258 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN
260 ELSE IF( n.LT.0 )
THEN
262 ELSE IF( ncvt.LT.0 )
THEN
264 ELSE IF( nru.LT.0 )
THEN
266 ELSE IF( ncc.LT.0 )
THEN
268 ELSE IF( ( ncvt.EQ.0 .AND. ldvt.LT.1 ) .OR.
269 $ ( ncvt.GT.0 .AND. ldvt.LT.
max( 1, n ) ) )
THEN
271 ELSE IF( ldu.LT.
max( 1, nru ) )
THEN
273 ELSE IF( ( ncc.EQ.0 .AND. ldc.LT.1 ) .OR.
274 $ ( ncc.GT.0 .AND. ldc.LT.
max( 1, n ) ) )
THEN
278 CALL xerbla(
'SLASDQ', -info )
286 rotate = ( ncvt.GT.0 ) .OR. ( nru.GT.0 ) .OR. ( ncc.GT.0 )
293 IF( ( iuplo.EQ.1 ) .AND. ( sqre1.EQ.1 ) )
THEN
295 CALL slartg( d( i ), e( i ), cs, sn, r )
298 d( i+1 ) = cs*d( i+1 )
304 CALL slartg( d( n ), e( n ), cs, sn, r )
317 $
CALL slasr(
'L',
'V',
'F', np1, ncvt, work( 1 ),
318 $ work( np1 ), vt, ldvt )
324 IF( iuplo.EQ.2 )
THEN
326 CALL slartg( d( i ), e( i ), cs, sn, r )
329 d( i+1 ) = cs*d( i+1 )
339 IF( sqre1.EQ.1 )
THEN
351 IF( sqre1.EQ.0 )
THEN
352 CALL slasr(
'R',
'V',
'F', nru, n, work( 1 ),
353 $ work( np1 ), u, ldu )
355 CALL slasr(
'R', 'v
', 'f
', NRU, NP1, WORK( 1 ),
356 $ WORK( NP1 ), U, LDU )
360.EQ.
IF( SQRE10 ) THEN
361 CALL SLASR( 'l
', 'v
', 'f
', N, NCC, WORK( 1 ),
362 $ WORK( NP1 ), C, LDC )
364 CALL SLASR( 'l
', 'v
', 'f
', NP1, NCC, WORK( 1 ),
365 $ WORK( NP1 ), C, LDC )
373 CALL SBDSQR( 'u
', N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, C,
386.LT.
IF( D( J )SMIN ) THEN
398 $ CALL SSWAP( NCVT, VT( ISUB, 1 ), LDVT, VT( I, 1 ), LDVT )
400 $ CALL SSWAP( NRU, U( 1, ISUB ), 1, U( 1, I ), 1 )
402 $ CALL SSWAP( NCC, C( ISUB, 1 ), LDC, C( I, 1 ), LDC )
subroutine slasdq(uplo, sqre, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work, info)
SLASDQ computes the SVD of a real bidiagonal matrix with diagonal d and off-diagonal e....
subroutine slasr(side, pivot, direct, m, n, c, s, a, lda)
SLASR applies a sequence of plane rotations to a general rectangular matrix.
subroutine slartg(f, g, c, s, r)
SLARTG generates a plane rotation with real cosine and real sine.
subroutine sbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work, info)
SBDSQR