version 1.1, 2020/05/21 21:45:57
|
version 1.2, 2023/08/07 08:38:50
|
Line 220
|
Line 220
|
*> left singular vectors in the case JOBU = 'F'. |
*> left singular vectors in the case JOBU = 'F'. |
*> |
*> |
*> If LIWORK, LWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> If LIWORK, LWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> LIWORK(1) returns the minimal LIWORK. |
*> IWORK(1) returns the minimal LIWORK. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LIWORK |
*> \param[in] LIWORK |
Line 231
|
Line 231
|
*> LIWORK >= N if JOBP = 'N' and JOBA .NE. 'E'; |
*> LIWORK >= N if JOBP = 'N' and JOBA .NE. 'E'; |
*> LIWORK >= N + M - 1 + N, if JOBP = 'P' and JOBA = 'E'; |
*> LIWORK >= N + M - 1 + N, if JOBP = 'P' and JOBA = 'E'; |
*> LIWORK >= N + N if JOBP = 'N' and JOBA = 'E'. |
*> LIWORK >= N + N if JOBP = 'N' and JOBA = 'E'. |
* |
*> |
*> If LIWORK = -1, then a workspace query is assumed; the routine |
*> If LIWORK = -1, then a workspace query is assumed; the routine |
*> only calculates and returns the optimal and minimal sizes |
*> only calculates and returns the optimal and minimal sizes |
*> for the WORK, IWORK, and RWORK arrays, and no error |
*> for the WORK, IWORK, and RWORK arrays, and no error |
Line 317
|
Line 317
|
*> N^(-1/4) * RWORK(1) <= ||pinv(C)||_2 <= N^(1/4) * RWORK(1). |
*> N^(-1/4) * RWORK(1) <= ||pinv(C)||_2 <= N^(1/4) * RWORK(1). |
*> Otherwise, RWORK(1) = -1. |
*> Otherwise, RWORK(1) = -1. |
*> 2. RWORK(2) contains the number of singular values computed as |
*> 2. RWORK(2) contains the number of singular values computed as |
*> exact zeros in DGESVD applied to the upper triangular or trapeziodal |
*> exact zeros in DGESVD applied to the upper triangular or trapezoidal |
*> R (from the initial QR factorization). In case of early exit (no call to |
*> R (from the initial QR factorization). In case of early exit (no call to |
*> DGESVD, such as in the case of zero matrix) RWORK(2) = -1. |
*> DGESVD, such as in the case of zero matrix) RWORK(2) = -1. |
*> |
*> |
Line 331
|
Line 331
|
*> The dimension of the array RWORK. |
*> The dimension of the array RWORK. |
*> If JOBP ='P', then LRWORK >= MAX(2, M). |
*> If JOBP ='P', then LRWORK >= MAX(2, M). |
*> Otherwise, LRWORK >= 2 |
*> Otherwise, LRWORK >= 2 |
* |
*> |
*> If LRWORK = -1, then a workspace query is assumed; the routine |
*> If LRWORK = -1, then a workspace query is assumed; the routine |
*> only calculates and returns the optimal and minimal sizes |
*> only calculates and returns the optimal and minimal sizes |
*> for the WORK, IWORK, and RWORK arrays, and no error |
*> for the WORK, IWORK, and RWORK arrays, and no error |
Line 406
|
Line 406
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date November 2018 |
|
* |
|
*> \ingroup doubleGEsing |
*> \ingroup doubleGEsing |
* |
* |
* ===================================================================== |
* ===================================================================== |
Line 641
|
Line 639
|
IF ( WNTVA ) THEN |
IF ( WNTVA ) THEN |
* .. minimal workspace length for N x N/2 DGEQRF |
* .. minimal workspace length for N x N/2 DGEQRF |
LWQRF = MAX( N/2, 1 ) |
LWQRF = MAX( N/2, 1 ) |
* .. minimal workspace lengt for N/2 x N/2 DGESVD |
* .. minimal workspace length for N/2 x N/2 DGESVD |
LWSVD2 = MAX( 5 * (N/2), 1 ) |
LWSVD2 = MAX( 5 * (N/2), 1 ) |
LWORQ2 = MAX( N, 1 ) |
LWORQ2 = MAX( N, 1 ) |
MINWRK2 = MAX( LWQP3, N/2+LWQRF, N/2+LWSVD2, |
MINWRK2 = MAX( LWQP3, N/2+LWQRF, N/2+LWSVD2, |