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, IUPLO, 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 340 CALL slartg( d( n ), e( n ), cs, sn, r )
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 IF( sqre1.EQ.0 )
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 IF( d( j ).LT.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 xerbla(SRNAME, INFO)
XERBLA
subroutine sswap(N, SX, INCX, SY, INCY)
SSWAP
subroutine sbdsqr(UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, C, LDC, WORK, INFO)
SBDSQR
subroutine slasr(SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA)
SLASR applies a sequence of plane rotations to a general rectangular matrix.