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 xerbla(srname, info)
subroutine sbdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work, info)
SBDSQR
subroutine slartg(f, g, c, s, r)
SLARTG generates a plane rotation with real cosine and real sine.
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 sswap(n, sx, incx, sy, incy)
SSWAP