version 1.2, 2014/01/27 09:28:45
|
version 1.3, 2015/11/26 11:44:27
|
Line 55
|
Line 55
|
*> [ 0 S 0 ] |
*> [ 0 S 0 ] |
*> [ 0 0 I ] |
*> [ 0 0 I ] |
*> |
*> |
*> X11 is P-by-Q. The unitary matrices U1, U2, V1, and V2 are P-by-P, |
*> X11 is P-by-Q. The unitary matrices U1, U2, and V1 are P-by-P, |
*> (M-P)-by-(M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively. C and S are |
*> (M-P)-by-(M-P), and Q-by-Q, respectively. C and S are R-by-R |
*> R-by-R nonnegative diagonal matrices satisfying C^2 + S^2 = I, in |
*> nonnegative diagonal matrices satisfying C^2 + S^2 = I, in which |
*> which R = MIN(P,M-P,Q,M-Q). |
*> R = MIN(P,M-P,Q,M-Q). |
*> |
*> \endverbatim |
*>\endverbatim |
|
* |
* |
* Arguments: |
* Arguments: |
* ========== |
* ========== |
Line 68
|
Line 67
|
*> \param[in] JOBU1 |
*> \param[in] JOBU1 |
*> \verbatim |
*> \verbatim |
*> JOBU1 is CHARACTER |
*> JOBU1 is CHARACTER |
*> = 'Y': U1 is computed; |
*> = 'Y': U1 is computed; |
*> otherwise: U1 is not computed. |
*> otherwise: U1 is not computed. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] JOBU2 |
*> \param[in] JOBU2 |
*> \verbatim |
*> \verbatim |
*> JOBU2 is CHARACTER |
*> JOBU2 is CHARACTER |
*> = 'Y': U2 is computed; |
*> = 'Y': U2 is computed; |
*> otherwise: U2 is not computed. |
*> otherwise: U2 is not computed. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] JOBV1T |
*> \param[in] JOBV1T |
*> \verbatim |
*> \verbatim |
*> JOBV1T is CHARACTER |
*> JOBV1T is CHARACTER |
*> = 'Y': V1T is computed; |
*> = 'Y': V1T is computed; |
*> otherwise: V1T is not computed. |
*> otherwise: V1T is not computed. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] M |
*> \param[in] M |
*> \verbatim |
*> \verbatim |
*> M is INTEGER |
*> M is INTEGER |
*> The number of rows and columns in X. |
*> The number of rows in X. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] P |
*> \param[in] P |
*> \verbatim |
*> \verbatim |
*> P is INTEGER |
*> P is INTEGER |
*> The number of rows in X11 and X12. 0 <= P <= M. |
*> The number of rows in X11. 0 <= P <= M. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] Q |
*> \param[in] Q |
*> \verbatim |
*> \verbatim |
*> Q is INTEGER |
*> Q is INTEGER |
*> The number of columns in X11 and X21. 0 <= Q <= M. |
*> The number of columns in X11 and X21. 0 <= Q <= M. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] X11 |
*> \param[in,out] X11 |
*> \verbatim |
*> \verbatim |
*> X11 is COMPLEX*16 array, dimension (LDX11,Q) |
*> X11 is COMPLEX*16 array, dimension (LDX11,Q) |
*> On entry, part of the unitary matrix whose CSD is |
*> On entry, part of the unitary matrix whose CSD is desired. |
*> desired. |
|
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDX11 |
*> \param[in] LDX11 |
*> \verbatim |
*> \verbatim |
*> LDX11 is INTEGER |
*> LDX11 is INTEGER |
*> The leading dimension of X11. LDX11 >= MAX(1,P). |
*> The leading dimension of X11. LDX11 >= MAX(1,P). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] X21 |
*> \param[in,out] X21 |
*> \verbatim |
*> \verbatim |
*> X21 is COMPLEX*16 array, dimension (LDX21,Q) |
*> X21 is COMPLEX*16 array, dimension (LDX21,Q) |
*> On entry, part of the unitary matrix whose CSD is |
*> On entry, part of the unitary matrix whose CSD is desired. |
*> desired. |
|
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDX21 |
*> \param[in] LDX21 |
*> \verbatim |
*> \verbatim |
*> LDX21 is INTEGER |
*> LDX21 is INTEGER |
*> The leading dimension of X21. LDX21 >= MAX(1,M-P). |
*> The leading dimension of X21. LDX21 >= MAX(1,M-P). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] THETA |
*> \param[out] THETA |
*> \verbatim |
*> \verbatim |
*> THETA is COMPLEX*16 array, dimension (R), in which R = |
*> THETA is DOUBLE PRECISION array, dimension (R), in which R = |
*> MIN(P,M-P,Q,M-Q). |
*> MIN(P,M-P,Q,M-Q). |
*> C = DIAG( COS(THETA(1)), ... , COS(THETA(R)) ) and |
*> C = DIAG( COS(THETA(1)), ... , COS(THETA(R)) ) and |
*> S = DIAG( SIN(THETA(1)), ... , SIN(THETA(R)) ). |
*> S = DIAG( SIN(THETA(1)), ... , SIN(THETA(R)) ). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] U1 |
*> \param[out] U1 |
*> \verbatim |
*> \verbatim |
*> U1 is COMPLEX*16 array, dimension (P) |
*> U1 is COMPLEX*16 array, dimension (P) |
*> If JOBU1 = 'Y', U1 contains the P-by-P unitary matrix U1. |
*> If JOBU1 = 'Y', U1 contains the P-by-P unitary matrix U1. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDU1 |
*> \param[in] LDU1 |
*> \verbatim |
*> \verbatim |
*> LDU1 is INTEGER |
*> LDU1 is INTEGER |
*> The leading dimension of U1. If JOBU1 = 'Y', LDU1 >= |
*> The leading dimension of U1. If JOBU1 = 'Y', LDU1 >= |
*> MAX(1,P). |
*> MAX(1,P). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] U2 |
*> \param[out] U2 |
*> \verbatim |
*> \verbatim |
*> U2 is COMPLEX*16 array, dimension (M-P) |
*> U2 is COMPLEX*16 array, dimension (M-P) |
*> If JOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) unitary |
*> If JOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) unitary |
*> matrix U2. |
*> matrix U2. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDU2 |
*> \param[in] LDU2 |
*> \verbatim |
*> \verbatim |
*> LDU2 is INTEGER |
*> LDU2 is INTEGER |
*> The leading dimension of U2. If JOBU2 = 'Y', LDU2 >= |
*> The leading dimension of U2. If JOBU2 = 'Y', LDU2 >= |
*> MAX(1,M-P). |
*> MAX(1,M-P). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] V1T |
*> \param[out] V1T |
*> \verbatim |
*> \verbatim |
*> V1T is COMPLEX*16 array, dimension (Q) |
*> V1T is COMPLEX*16 array, dimension (Q) |
*> If JOBV1T = 'Y', V1T contains the Q-by-Q matrix unitary |
*> If JOBV1T = 'Y', V1T contains the Q-by-Q matrix unitary |
*> matrix V1**T. |
*> matrix V1**T. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDV1T |
*> \param[in] LDV1T |
*> \verbatim |
*> \verbatim |
*> LDV1T is INTEGER |
*> LDV1T is INTEGER |
*> The leading dimension of V1T. If JOBV1T = 'Y', LDV1T >= |
*> The leading dimension of V1T. If JOBV1T = 'Y', LDV1T >= |
*> MAX(1,Q). |
*> MAX(1,Q). |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] WORK |
*> \param[out] WORK |
*> \verbatim |
*> \verbatim |
*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) |
*> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) |
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. |
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. |
*> If INFO > 0 on exit, WORK(2:R) contains the values PHI(1), |
|
*> ..., PHI(R-1) that, together with THETA(1), ..., THETA(R), |
|
*> define the matrix in intermediate bidiagonal-block form |
|
*> remaining after nonconvergence. INFO specifies the number |
|
*> of nonzero PHI's. |
|
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LWORK |
*> \param[in] LWORK |
*> \verbatim |
*> \verbatim |
*> LWORK is INTEGER |
*> LWORK is INTEGER |
*> The dimension of the array WORK. |
*> The dimension of the array WORK. |
*> \endverbatim |
*> |
*> \verbatim |
*> If LWORK = -1, then a workspace query is assumed; the routine |
*> If LWORK = -1, then a workspace query is assumed; the routine |
*> only calculates the optimal size of the WORK array, returns |
*> only calculates the optimal size of the WORK array, returns |
*> this value as the first entry of the work array, and no error |
*> this value as the first entry of the work array, and no error |
*> message related to LWORK is issued by XERBLA. |
*> message related to LWORK is issued by XERBLA. |
|
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[out] RWORK |
*> \param[out] RWORK |
*> \verbatim |
*> \verbatim |
*> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)) |
*> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)) |
*> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK. |
*> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK. |
*> If INFO > 0 on exit, RWORK(2:R) contains the values PHI(1), |
*> If INFO > 0 on exit, RWORK(2:R) contains the values PHI(1), |
*> ..., PHI(R-1) that, together with THETA(1), ..., THETA(R), |
*> ..., PHI(R-1) that, together with THETA(1), ..., THETA(R), |
*> define the matrix in intermediate bidiagonal-block form |
*> define the matrix in intermediate bidiagonal-block form |
*> remaining after nonconvergence. INFO specifies the number |
*> remaining after nonconvergence. INFO specifies the number |
*> of nonzero PHI's. |
*> of nonzero PHI's. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LRWORK |
*> \param[in] LRWORK |
*> \verbatim |
*> \verbatim |
*> LRWORK is INTEGER |
*> LRWORK is INTEGER |
*> The dimension of the array RWORK. |
*> The dimension of the array RWORK. |
*> |
*> |
*> If LRWORK = -1, then a workspace query is assumed; the routine |
*> If LRWORK = -1, then a workspace query is assumed; the routine |
*> only calculates the optimal size of the RWORK array, returns |
*> only calculates the optimal size of the RWORK array, returns |
*> this value as the first entry of the work array, and no error |
*> this value as the first entry of the work array, and no error |
*> message related to LRWORK is issued by XERBLA. |
*> message related to LRWORK is issued by XERBLA. |
|
*> \endverbatim |
|
* |
*> \param[out] IWORK |
*> \param[out] IWORK |
*> \verbatim |
*> \verbatim |
*> IWORK is INTEGER array, dimension (M-MIN(P,M-P,Q,M-Q)) |
*> IWORK is INTEGER array, dimension (M-MIN(P,M-P,Q,M-Q)) |
*> \endverbatim |
*> \endverbatim |
*> \endverbatim |
|
*> |
*> |
*> \param[out] INFO |
*> \param[out] INFO |
*> \verbatim |
*> \verbatim |
*> INFO is INTEGER |
*> INFO is INTEGER |
*> = 0: successful exit. |
*> = 0: successful exit. |
*> < 0: if INFO = -i, the i-th argument had an illegal value. |
*> < 0: if INFO = -i, the i-th argument had an illegal value. |
*> > 0: ZBBCSD did not converge. See the description of WORK |
*> > 0: ZBBCSD did not converge. See the description of WORK |
*> above for details. |
*> above for details. |
*> \endverbatim |
*> \endverbatim |
* |
* |
Line 261
|
Line 253
|
$ LDV1T, WORK, LWORK, RWORK, LRWORK, IWORK, |
$ LDV1T, WORK, LWORK, RWORK, LRWORK, IWORK, |
$ INFO ) |
$ INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.5.0) -- |
* -- LAPACK computational routine (version 3.6.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..-- |
* July 2012 |
* July 2012 |