331 SUBROUTINE sggsvd( JOBU, JOBV, JOBQ, M, N, P, K, L, A, LDA, B,
332 $ LDB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ, WORK,
340 CHARACTER JOBQ, JOBU, JOBV
341 INTEGER INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P
345 REAL A( LDA, * ), ALPHA( * ), B( LDB, * ),
346 $ beta( * ), q( ldq, * ), u( ldu, * ),
347 $ v( ldv, * ), work( * )
353 LOGICAL WANTQ, WANTU, WANTV
354 INTEGER I, IBND, , J, NCYCLE
355 REAL ANORM, BNORM, SMAX, TEMP, TOLA, TOLB, ULP, UNFL
360EXTERNAL lsame, slamch, slange
372 wantu = lsame( jobu, 'u
' )
373 WANTV = LSAME( JOBV, 'v
' )
374 WANTQ = LSAME( JOBQ, 'q
' )
377.NOT..OR.
IF( ( WANTU LSAME( JOBU, 'n
' ) ) ) THEN
379.NOT..OR.
ELSE IF( ( WANTV LSAME( JOBV, 'n
' ) ) ) THEN
381.NOT..OR.
ELSE IF( ( WANTQ LSAME( JOBQ, 'n
' ) ) ) THEN
383.LT.
ELSE IF( M0 ) THEN
385.LT.
ELSE IF( N0 ) THEN
387.LT.
ELSE IF( P0 ) THEN
389.LT.
ELSE IF( LDAMAX( 1, M ) ) THEN
391.LT.
ELSE IF( LDBMAX( 1, P ) ) THEN
393.LT..OR..AND..LT.
ELSE IF( LDU1 ( WANTU LDUM ) ) THEN
395.LT..OR..AND..LT.
ELSE IF( LDV1 ( WANTV LDVP ) ) THEN
397.LT..OR..AND..LT.
ELSE IF( LDQ1 ( WANTQ LDQN ) ) THEN
401 CALL XERBLA( 'sggsvd', -INFO )
407 ANORM = SLANGE( '1
', M, N, A, LDA, WORK )
408 BNORM = SLANGE( '1
', P, N, B, LDB, WORK )
413 ULP = SLAMCH( 'precision
' )
414 UNFL = SLAMCH( 'safe minimum
' )
415 TOLA = MAX( M, N )*MAX( ANORM, UNFL )*ULP
416 TOLB = MAX( P, N )*MAX( BNORM, UNFL )*ULP
420 CALL SGGSVP( JOBU, JOBV, JOBQ, M, P, N, A, LDA, B, LDB, TOLA,
421 $ TOLB, K, L, U, LDU, V, LDV, Q, LDQ, IWORK, WORK,
422 $ WORK( N+1 ), INFO )
426 CALL STGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B, LDB,
427 $ TOLA, TOLB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ,
428 $ WORK, NCYCLE, INFO )
433 CALL SCOPY( N, ALPHA, 1, WORK, 1 )
441 DO 10 J = I + 1, IBND
443.GT.
IF( TEMPSMAX ) THEN
449 WORK( K+ISUB ) = WORK( K+I )
451 IWORK( K+I ) = K + ISUB
subroutine xerbla(srname, info)
XERBLA
subroutine sggsvp(jobu, jobv, jobq, m, p, n, a, lda, b, ldb, tola, tolb, k, l, u, ldu, v, ldv, q, ldq, iwork, tau, work, info)
SGGSVP
subroutine stgsja(jobu, jobv, jobq, m, p, n, k, l, a, lda, b, ldb, tola, tolb, alpha, beta, u, ldu, v, ldv, q, ldq, work, ncycle, info)
STGSJA
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sggsvd(jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb, alpha, beta, u, ldu, v, ldv, q, ldq, work, iwork, info)
SGGSVD computes the singular value decomposition (SVD) for OTHER matrices