version 1.7, 2012/12/14 14:22:27
|
version 1.15, 2018/05/29 06:55:16
|
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 DBBCSD + dependencies |
*> Download DBBCSD + dependencies |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dbbcsd.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dbbcsd.f"> |
*> [TGZ]</a> |
*> [TGZ]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dbbcsd.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dbbcsd.f"> |
*> [ZIP]</a> |
*> [ZIP]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbbcsd.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbbcsd.f"> |
*> [TXT]</a> |
*> [TXT]</a> |
*> \endhtmlonly |
*> \endhtmlonly |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
Line 22
|
Line 22
|
* THETA, PHI, U1, LDU1, U2, LDU2, V1T, LDV1T, |
* THETA, PHI, U1, LDU1, U2, LDU2, V1T, LDV1T, |
* V2T, LDV2T, B11D, B11E, B12D, B12E, B21D, B21E, |
* V2T, LDV2T, B11D, B11E, B12D, B12E, B21D, B21E, |
* B22D, B22E, WORK, LWORK, INFO ) |
* B22D, B22E, WORK, LWORK, INFO ) |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
* CHARACTER JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS |
* CHARACTER JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS |
* INTEGER INFO, LDU1, LDU2, LDV1T, LDV2T, LWORK, M, P, Q |
* INTEGER INFO, LDU1, LDU2, LDV1T, LDV2T, LWORK, M, P, Q |
Line 34
|
Line 34
|
* DOUBLE PRECISION U1( LDU1, * ), U2( LDU2, * ), V1T( LDV1T, * ), |
* DOUBLE PRECISION U1( LDU1, * ), U2( LDU2, * ), V1T( LDV1T, * ), |
* $ V2T( LDV2T, * ) |
* $ V2T( LDV2T, * ) |
* .. |
* .. |
* |
* |
* |
* |
*> \par Purpose: |
*> \par Purpose: |
* ============= |
* ============= |
Line 149
|
Line 149
|
*> \param[in,out] U1 |
*> \param[in,out] U1 |
*> \verbatim |
*> \verbatim |
*> U1 is DOUBLE PRECISION array, dimension (LDU1,P) |
*> U1 is DOUBLE PRECISION array, dimension (LDU1,P) |
*> On entry, an LDU1-by-P matrix. On exit, U1 is postmultiplied |
*> On entry, a P-by-P matrix. On exit, U1 is postmultiplied |
*> by the left singular vector matrix common to [ B11 ; 0 ] and |
*> by the left singular vector matrix common to [ B11 ; 0 ] and |
*> [ B12 0 0 ; 0 -I 0 0 ]. |
*> [ B12 0 0 ; 0 -I 0 0 ]. |
*> \endverbatim |
*> \endverbatim |
Line 157
|
Line 157
|
*> \param[in] LDU1 |
*> \param[in] LDU1 |
*> \verbatim |
*> \verbatim |
*> LDU1 is INTEGER |
*> LDU1 is INTEGER |
*> The leading dimension of the array U1. |
*> The leading dimension of the array U1, LDU1 >= MAX(1,P). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] U2 |
*> \param[in,out] U2 |
*> \verbatim |
*> \verbatim |
*> U2 is DOUBLE PRECISION array, dimension (LDU2,M-P) |
*> U2 is DOUBLE PRECISION array, dimension (LDU2,M-P) |
*> On entry, an LDU2-by-(M-P) matrix. On exit, U2 is |
*> On entry, an (M-P)-by-(M-P) matrix. On exit, U2 is |
*> postmultiplied by the left singular vector matrix common to |
*> postmultiplied by the left singular vector matrix common to |
*> [ B21 ; 0 ] and [ B22 0 0 ; 0 0 I ]. |
*> [ B21 ; 0 ] and [ B22 0 0 ; 0 0 I ]. |
*> \endverbatim |
*> \endverbatim |
Line 171
|
Line 171
|
*> \param[in] LDU2 |
*> \param[in] LDU2 |
*> \verbatim |
*> \verbatim |
*> LDU2 is INTEGER |
*> LDU2 is INTEGER |
*> The leading dimension of the array U2. |
*> The leading dimension of the array U2, LDU2 >= MAX(1,M-P). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] V1T |
*> \param[in,out] V1T |
*> \verbatim |
*> \verbatim |
*> V1T is DOUBLE PRECISION array, dimension (LDV1T,Q) |
*> V1T is DOUBLE PRECISION array, dimension (LDV1T,Q) |
*> On entry, a LDV1T-by-Q matrix. On exit, V1T is premultiplied |
*> On entry, a Q-by-Q matrix. On exit, V1T is premultiplied |
*> by the transpose of the right singular vector |
*> by the transpose of the right singular vector |
*> matrix common to [ B11 ; 0 ] and [ B21 ; 0 ]. |
*> matrix common to [ B11 ; 0 ] and [ B21 ; 0 ]. |
*> \endverbatim |
*> \endverbatim |
Line 185
|
Line 185
|
*> \param[in] LDV1T |
*> \param[in] LDV1T |
*> \verbatim |
*> \verbatim |
*> LDV1T is INTEGER |
*> LDV1T is INTEGER |
*> The leading dimension of the array V1T. |
*> The leading dimension of the array V1T, LDV1T >= MAX(1,Q). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] V2T |
*> \param[in,out] V2T |
*> \verbatim |
*> \verbatim |
*> V2T is DOUBLE PRECISION array, dimenison (LDV2T,M-Q) |
*> V2T is DOUBLE PRECISION array, dimension (LDV2T,M-Q) |
*> On entry, a LDV2T-by-(M-Q) matrix. On exit, V2T is |
*> On entry, an (M-Q)-by-(M-Q) matrix. On exit, V2T is |
*> premultiplied by the transpose of the right |
*> premultiplied by the transpose of the right |
*> singular vector matrix common to [ B12 0 0 ; 0 -I 0 ] and |
*> singular vector matrix common to [ B12 0 0 ; 0 -I 0 ] and |
*> [ B22 0 0 ; 0 0 I ]. |
*> [ B22 0 0 ; 0 0 I ]. |
Line 200
|
Line 200
|
*> \param[in] LDV2T |
*> \param[in] LDV2T |
*> \verbatim |
*> \verbatim |
*> LDV2T is INTEGER |
*> LDV2T is INTEGER |
*> The leading dimension of the array V2T. |
*> The leading dimension of the array V2T, LDV2T >= MAX(1,M-Q). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] B11D |
*> \param[out] B11D |
Line 240
|
Line 240
|
*> \param[out] B21D |
*> \param[out] B21D |
*> \verbatim |
*> \verbatim |
*> B21D is DOUBLE PRECISION array, dimension (Q) |
*> B21D is DOUBLE PRECISION array, dimension (Q) |
*> When CBBCSD converges, B21D contains the negative sines of |
*> When DBBCSD converges, B21D contains the negative sines of |
*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then |
*> THETA(1), ..., THETA(Q). If DBBCSD fails to converge, then |
*> B21D contains the diagonal of the partially reduced bottom-left |
*> B21D contains the diagonal of the partially reduced bottom-left |
*> block. |
*> block. |
*> \endverbatim |
*> \endverbatim |
Line 249
|
Line 249
|
*> \param[out] B21E |
*> \param[out] B21E |
*> \verbatim |
*> \verbatim |
*> B21E is DOUBLE PRECISION array, dimension (Q-1) |
*> B21E is DOUBLE PRECISION array, dimension (Q-1) |
*> When CBBCSD converges, B21E contains zeros. If CBBCSD fails |
*> When DBBCSD converges, B21E contains zeros. If DBBCSD fails |
*> to converge, then B21E contains the subdiagonal of the |
*> to converge, then B21E contains the subdiagonal of the |
*> partially reduced bottom-left block. |
*> partially reduced bottom-left block. |
*> \endverbatim |
*> \endverbatim |
Line 257
|
Line 257
|
*> \param[out] B22D |
*> \param[out] B22D |
*> \verbatim |
*> \verbatim |
*> B22D is DOUBLE PRECISION array, dimension (Q) |
*> B22D is DOUBLE PRECISION array, dimension (Q) |
*> When CBBCSD converges, B22D contains the negative sines of |
*> When DBBCSD converges, B22D contains the negative sines of |
*> THETA(1), ..., THETA(Q). If CBBCSD fails to converge, then |
*> THETA(1), ..., THETA(Q). If DBBCSD fails to converge, then |
*> B22D contains the diagonal of the partially reduced bottom-right |
*> B22D contains the diagonal of the partially reduced bottom-right |
*> block. |
*> block. |
*> \endverbatim |
*> \endverbatim |
Line 266
|
Line 266
|
*> \param[out] B22E |
*> \param[out] B22E |
*> \verbatim |
*> \verbatim |
*> B22E is DOUBLE PRECISION array, dimension (Q-1) |
*> B22E is DOUBLE PRECISION array, dimension (Q-1) |
*> When CBBCSD converges, B22E contains zeros. If CBBCSD fails |
*> When DBBCSD converges, B22E contains zeros. If DBBCSD fails |
*> to converge, then B22E contains the subdiagonal of the |
*> to converge, then B22E contains the subdiagonal of the |
*> partially reduced bottom-right block. |
*> partially reduced bottom-right block. |
*> \endverbatim |
*> \endverbatim |
Line 317
|
Line 317
|
* 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 doubleOTHERcomputational |
*> \ingroup doubleOTHERcomputational |
* |
* |
Line 332
|
Line 332
|
$ V2T, LDV2T, B11D, B11E, B12D, B12E, B21D, B21E, |
$ V2T, LDV2T, B11D, B11E, B12D, B12E, B21D, B21E, |
$ B22D, B22E, WORK, LWORK, INFO ) |
$ B22D, B22E, WORK, LWORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.4.0) -- |
* -- LAPACK computational routine (version 3.7.1) -- |
* -- 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 JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS |
CHARACTER JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS |
Line 358
|
Line 358
|
PARAMETER ( HUNDRED = 100.0D0, MEIGHTH = -0.125D0, |
PARAMETER ( HUNDRED = 100.0D0, MEIGHTH = -0.125D0, |
$ ONE = 1.0D0, PIOVER2 = 1.57079632679489662D0, |
$ ONE = 1.0D0, PIOVER2 = 1.57079632679489662D0, |
$ TEN = 10.0D0, ZERO = 0.0D0 ) |
$ TEN = 10.0D0, ZERO = 0.0D0 ) |
DOUBLE PRECISION NEGONECOMPLEX |
DOUBLE PRECISION NEGONE |
PARAMETER ( NEGONECOMPLEX = -1.0D0 ) |
PARAMETER ( NEGONE = -1.0D0 ) |
* .. |
* .. |
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL COLMAJOR, LQUERY, RESTART11, RESTART12, |
LOGICAL COLMAJOR, LQUERY, RESTART11, RESTART12, |
Line 477
|
Line 477
|
* Initial deflation |
* Initial deflation |
* |
* |
IMAX = Q |
IMAX = Q |
DO WHILE( ( IMAX .GT. 1 ) .AND. ( PHI(IMAX-1) .EQ. ZERO ) ) |
DO WHILE( IMAX .GT. 1 ) |
|
IF( PHI(IMAX-1) .NE. ZERO ) THEN |
|
EXIT |
|
END IF |
IMAX = IMAX - 1 |
IMAX = IMAX - 1 |
END DO |
END DO |
IMIN = IMAX - 1 |
IMIN = IMAX - 1 |
Line 939
|
Line 942
|
B21D(IMAX) = -B21D(IMAX) |
B21D(IMAX) = -B21D(IMAX) |
IF( WANTV1T ) THEN |
IF( WANTV1T ) THEN |
IF( COLMAJOR ) THEN |
IF( COLMAJOR ) THEN |
CALL DSCAL( Q, NEGONECOMPLEX, V1T(IMAX,1), LDV1T ) |
CALL DSCAL( Q, NEGONE, V1T(IMAX,1), LDV1T ) |
ELSE |
ELSE |
CALL DSCAL( Q, NEGONECOMPLEX, V1T(1,IMAX), 1 ) |
CALL DSCAL( Q, NEGONE, V1T(1,IMAX), 1 ) |
END IF |
END IF |
END IF |
END IF |
END IF |
END IF |
Line 962
|
Line 965
|
B12D(IMAX) = -B12D(IMAX) |
B12D(IMAX) = -B12D(IMAX) |
IF( WANTU1 ) THEN |
IF( WANTU1 ) THEN |
IF( COLMAJOR ) THEN |
IF( COLMAJOR ) THEN |
CALL DSCAL( P, NEGONECOMPLEX, U1(1,IMAX), 1 ) |
CALL DSCAL( P, NEGONE, U1(1,IMAX), 1 ) |
ELSE |
ELSE |
CALL DSCAL( P, NEGONECOMPLEX, U1(IMAX,1), LDU1 ) |
CALL DSCAL( P, NEGONE, U1(IMAX,1), LDU1 ) |
END IF |
END IF |
END IF |
END IF |
END IF |
END IF |
Line 972
|
Line 975
|
B22D(IMAX) = -B22D(IMAX) |
B22D(IMAX) = -B22D(IMAX) |
IF( WANTU2 ) THEN |
IF( WANTU2 ) THEN |
IF( COLMAJOR ) THEN |
IF( COLMAJOR ) THEN |
CALL DSCAL( M-P, NEGONECOMPLEX, U2(1,IMAX), 1 ) |
CALL DSCAL( M-P, NEGONE, U2(1,IMAX), 1 ) |
ELSE |
ELSE |
CALL DSCAL( M-P, NEGONECOMPLEX, U2(IMAX,1), LDU2 ) |
CALL DSCAL( M-P, NEGONE, U2(IMAX,1), LDU2 ) |
END IF |
END IF |
END IF |
END IF |
END IF |
END IF |
Line 984
|
Line 987
|
IF( B12D(IMAX)+B22D(IMAX) .LT. 0 ) THEN |
IF( B12D(IMAX)+B22D(IMAX) .LT. 0 ) THEN |
IF( WANTV2T ) THEN |
IF( WANTV2T ) THEN |
IF( COLMAJOR ) THEN |
IF( COLMAJOR ) THEN |
CALL DSCAL( M-Q, NEGONECOMPLEX, V2T(IMAX,1), LDV2T ) |
CALL DSCAL( M-Q, NEGONE, V2T(IMAX,1), LDV2T ) |
ELSE |
ELSE |
CALL DSCAL( M-Q, NEGONECOMPLEX, V2T(1,IMAX), 1 ) |
CALL DSCAL( M-Q, NEGONE, V2T(1,IMAX), 1 ) |
END IF |
END IF |
END IF |
END IF |
END IF |
END IF |