version 1.12, 2012/08/22 09:48:12
|
version 1.17, 2017/06/17 10:53:46
|
Line 2
|
Line 2
|
* |
* |
* =========== DOCUMENTATION =========== |
* =========== DOCUMENTATION =========== |
* |
* |
* Online html documentation available at |
* Online html documentation available at |
* http://www.netlib.org/lapack/explore-html/ |
* http://www.netlib.org/lapack/explore-html/ |
* |
* |
*> \htmlonly |
*> \htmlonly |
*> Download DBDSDC + dependencies |
*> Download DBDSDC + dependencies |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dbdsdc.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dbdsdc.f"> |
*> [TGZ]</a> |
*> [TGZ]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dbdsdc.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dbdsdc.f"> |
*> [ZIP]</a> |
*> [ZIP]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsdc.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsdc.f"> |
*> [TXT]</a> |
*> [TXT]</a> |
*> \endhtmlonly |
*> \endhtmlonly |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
* |
* |
* SUBROUTINE DBDSDC( UPLO, COMPQ, N, D, E, U, LDU, VT, LDVT, Q, IQ, |
* SUBROUTINE DBDSDC( UPLO, COMPQ, N, D, E, U, LDU, VT, LDVT, Q, IQ, |
* WORK, IWORK, INFO ) |
* WORK, IWORK, INFO ) |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
* CHARACTER COMPQ, UPLO |
* CHARACTER COMPQ, UPLO |
* INTEGER INFO, LDU, LDVT, N |
* INTEGER INFO, LDU, LDVT, N |
Line 30
|
Line 30
|
* DOUBLE PRECISION D( * ), E( * ), Q( * ), U( LDU, * ), |
* DOUBLE PRECISION D( * ), E( * ), Q( * ), U( LDU, * ), |
* $ VT( LDVT, * ), WORK( * ) |
* $ VT( LDVT, * ), WORK( * ) |
* .. |
* .. |
* |
* |
* |
* |
*> \par Purpose: |
*> \par Purpose: |
* ============= |
* ============= |
Line 186
|
Line 186
|
* Authors: |
* Authors: |
* ======== |
* ======== |
* |
* |
*> \author Univ. of Tennessee |
*> \author Univ. of Tennessee |
*> \author Univ. of California Berkeley |
*> \author Univ. of California Berkeley |
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date November 2011 |
*> \date June 2016 |
* |
* |
*> \ingroup auxOTHERcomputational |
*> \ingroup auxOTHERcomputational |
* |
* |
Line 205
|
Line 205
|
SUBROUTINE DBDSDC( UPLO, COMPQ, N, D, E, U, LDU, VT, LDVT, Q, IQ, |
SUBROUTINE DBDSDC( UPLO, COMPQ, N, D, E, U, LDU, VT, LDVT, Q, IQ, |
$ WORK, IWORK, INFO ) |
$ WORK, IWORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.4.0) -- |
* -- LAPACK computational routine (version 3.7.0) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* November 2011 |
* June 2016 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER COMPQ, UPLO |
CHARACTER COMPQ, UPLO |
Line 311
|
Line 311
|
WSTART = 1 |
WSTART = 1 |
QSTART = 3 |
QSTART = 3 |
IF( ICOMPQ.EQ.1 ) THEN |
IF( ICOMPQ.EQ.1 ) THEN |
CALL DCOPY( N, D, 1, Q( 1 ), 1 ) |
CALL DCOPY( N, D, 1, Q( 1 ), 1 ) |
CALL DCOPY( N-1, E, 1, Q( N+1 ), 1 ) |
CALL DCOPY( N-1, E, 1, Q( N+1 ), 1 ) |
END IF |
END IF |
IF( IUPLO.EQ.2 ) THEN |
IF( IUPLO.EQ.2 ) THEN |
Line 335
|
Line 335
|
* If ICOMPQ = 0, use DLASDQ to compute the singular values. |
* If ICOMPQ = 0, use DLASDQ to compute the singular values. |
* |
* |
IF( ICOMPQ.EQ.0 ) THEN |
IF( ICOMPQ.EQ.0 ) THEN |
|
* Ignore WSTART, instead using WORK( 1 ), since the two vectors |
|
* for CS and -SN above are added only if ICOMPQ == 2, |
|
* and adding them exceeds documented WORK size of 4*n. |
CALL DLASDQ( 'U', 0, N, 0, 0, 0, D, E, VT, LDVT, U, LDU, U, |
CALL DLASDQ( 'U', 0, N, 0, 0, 0, D, E, VT, LDVT, U, LDU, U, |
$ LDU, WORK( WSTART ), INFO ) |
$ LDU, WORK( 1 ), INFO ) |
GO TO 40 |
GO TO 40 |
END IF |
END IF |
* |
* |
Line 412
|
Line 415
|
DO 30 I = 1, NM1 |
DO 30 I = 1, NM1 |
IF( ( ABS( E( I ) ).LT.EPS ) .OR. ( I.EQ.NM1 ) ) THEN |
IF( ( ABS( E( I ) ).LT.EPS ) .OR. ( I.EQ.NM1 ) ) THEN |
* |
* |
* Subproblem found. First determine its size and then |
* Subproblem found. First determine its size and then |
* apply divide and conquer on it. |
* apply divide and conquer on it. |
* |
* |
IF( I.LT.NM1 ) THEN |
IF( I.LT.NM1 ) THEN |
* |
* |
* A subproblem with E(I) small for I < NM1. |
* A subproblem with E(I) small for I < NM1. |
* |
* |
NSIZE = I - START + 1 |
NSIZE = I - START + 1 |
ELSE IF( ABS( E( I ) ).GE.EPS ) THEN |
ELSE IF( ABS( E( I ) ).GE.EPS ) THEN |
* |
* |
* A subproblem with E(NM1) not too small but I = NM1. |
* A subproblem with E(NM1) not too small but I = NM1. |
* |
* |
NSIZE = N - START + 1 |
NSIZE = N - START + 1 |
ELSE |
ELSE |
* |
* |
* A subproblem with E(NM1) small. This implies an |
* A subproblem with E(NM1) small. This implies an |
* 1-by-1 subproblem at D(N). Solve this 1-by-1 problem |
* 1-by-1 subproblem at D(N). Solve this 1-by-1 problem |
* first. |
* first. |
* |
* |
NSIZE = I - START + 1 |
NSIZE = I - START + 1 |
IF( ICOMPQ.EQ.2 ) THEN |
IF( ICOMPQ.EQ.2 ) THEN |