version 1.8, 2020/05/21 21:46:03
|
version 1.9, 2023/08/07 08:39:17
|
Line 358
|
Line 358
|
*> RWORK(3) = SCONDA is an estimate for the condition number of |
*> RWORK(3) = SCONDA is an estimate for the condition number of |
*> column equilibrated A. (If JOBA = 'E' or 'G') |
*> column equilibrated A. (If JOBA = 'E' or 'G') |
*> SCONDA is an estimate of SQRT(||(R^* * R)^(-1)||_1). |
*> SCONDA is an estimate of SQRT(||(R^* * R)^(-1)||_1). |
*> It is computed using SPOCON. It holds |
*> It is computed using ZPOCON. It holds |
*> N^(-1/4) * SCONDA <= ||R^(-1)||_2 <= N^(1/4) * SCONDA |
*> N^(-1/4) * SCONDA <= ||R^(-1)||_2 <= N^(1/4) * SCONDA |
*> where R is the triangular factor from the QRF of A. |
*> where R is the triangular factor from the QRF of A. |
*> However, if R is truncated and the numerical rank is |
*> However, if R is truncated and the numerical rank is |
Line 367
|
Line 367
|
*> singular values might be lost. |
*> singular values might be lost. |
*> |
*> |
*> If full SVD is needed, the following two condition numbers are |
*> If full SVD is needed, the following two condition numbers are |
*> useful for the analysis of the algorithm. They are provied for |
*> useful for the analysis of the algorithm. They are provided for |
*> a developer/implementer who is familiar with the details of |
*> a developer/implementer who is familiar with the details of |
*> the method. |
*> the method. |
*> |
*> |
Line 483
|
Line 483
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date June 2016 |
|
* |
|
*> \ingroup complex16GEsing |
*> \ingroup complex16GEsing |
* |
* |
*> \par Further Details: |
*> \par Further Details: |
Line 569
|
Line 567
|
$ M, N, A, LDA, SVA, U, LDU, V, LDV, |
$ M, N, A, LDA, SVA, U, LDU, V, LDV, |
$ CWORK, LWORK, RWORK, LRWORK, IWORK, INFO ) |
$ CWORK, LWORK, RWORK, LRWORK, IWORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.7.1) -- |
* -- LAPACK computational routine -- |
* -- 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..-- |
* June 2017 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
IMPLICIT NONE |
IMPLICIT NONE |
Line 710
|
Line 707
|
IF ( LQUERY ) THEN |
IF ( LQUERY ) THEN |
CALL ZGEQP3( M, N, A, LDA, IWORK, CDUMMY, CDUMMY, -1, |
CALL ZGEQP3( M, N, A, LDA, IWORK, CDUMMY, CDUMMY, -1, |
$ RDUMMY, IERR ) |
$ RDUMMY, IERR ) |
LWRK_ZGEQP3 = CDUMMY(1) |
LWRK_ZGEQP3 = INT( CDUMMY(1) ) |
CALL ZGEQRF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR ) |
CALL ZGEQRF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR ) |
LWRK_ZGEQRF = CDUMMY(1) |
LWRK_ZGEQRF = INT( CDUMMY(1) ) |
CALL ZGELQF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR ) |
CALL ZGELQF( N, N, A, LDA, CDUMMY, CDUMMY,-1, IERR ) |
LWRK_ZGELQF = CDUMMY(1) |
LWRK_ZGELQF = INT( CDUMMY(1) ) |
END IF |
END IF |
MINWRK = 2 |
MINWRK = 2 |
OPTWRK = 2 |
OPTWRK = 2 |
Line 730
|
Line 727
|
IF ( LQUERY ) THEN |
IF ( LQUERY ) THEN |
CALL ZGESVJ( 'L', 'N', 'N', N, N, A, LDA, SVA, N, V, |
CALL ZGESVJ( 'L', 'N', 'N', N, N, A, LDA, SVA, N, V, |
$ LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJ = CDUMMY(1) |
LWRK_ZGESVJ = INT( CDUMMY(1) ) |
IF ( ERREST ) THEN |
IF ( ERREST ) THEN |
OPTWRK = MAX( N+LWRK_ZGEQP3, N**2+LWCON, |
OPTWRK = MAX( N+LWRK_ZGEQP3, N**2+LWCON, |
$ N+LWRK_ZGEQRF, LWRK_ZGESVJ ) |
$ N+LWRK_ZGEQRF, LWRK_ZGESVJ ) |
Line 766
|
Line 763
|
IF ( LQUERY ) THEN |
IF ( LQUERY ) THEN |
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A, |
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A, |
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJ = CDUMMY(1) |
LWRK_ZGESVJ = INT( CDUMMY(1) ) |
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY, |
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY, |
$ V, LDV, CDUMMY, -1, IERR ) |
$ V, LDV, CDUMMY, -1, IERR ) |
LWRK_ZUNMLQ = CDUMMY(1) |
LWRK_ZUNMLQ = INT( CDUMMY(1) ) |
IF ( ERREST ) THEN |
IF ( ERREST ) THEN |
OPTWRK = MAX( N+LWRK_ZGEQP3, LWCON, LWRK_ZGESVJ, |
OPTWRK = MAX( N+LWRK_ZGEQP3, LWCON, LWRK_ZGESVJ, |
$ N+LWRK_ZGELQF, 2*N+LWRK_ZGEQRF, |
$ N+LWRK_ZGELQF, 2*N+LWRK_ZGEQRF, |
Line 805
|
Line 802
|
IF ( LQUERY ) THEN |
IF ( LQUERY ) THEN |
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A, |
CALL ZGESVJ( 'L', 'U', 'N', N,N, U, LDU, SVA, N, A, |
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ LDA, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJ = CDUMMY(1) |
LWRK_ZGESVJ = INT( CDUMMY(1) ) |
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U, |
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U, |
$ LDU, CDUMMY, -1, IERR ) |
$ LDU, CDUMMY, -1, IERR ) |
LWRK_ZUNMQRM = CDUMMY(1) |
LWRK_ZUNMQRM = INT( CDUMMY(1) ) |
IF ( ERREST ) THEN |
IF ( ERREST ) THEN |
OPTWRK = N + MAX( LWRK_ZGEQP3, LWCON, N+LWRK_ZGEQRF, |
OPTWRK = N + MAX( LWRK_ZGEQP3, LWCON, N+LWRK_ZGEQRF, |
$ LWRK_ZGESVJ, LWRK_ZUNMQRM ) |
$ LWRK_ZGESVJ, LWRK_ZUNMQRM ) |
Line 867
|
Line 864
|
IF ( LQUERY ) THEN |
IF ( LQUERY ) THEN |
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U, |
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U, |
$ LDU, CDUMMY, -1, IERR ) |
$ LDU, CDUMMY, -1, IERR ) |
LWRK_ZUNMQRM = CDUMMY(1) |
LWRK_ZUNMQRM = INT( CDUMMY(1) ) |
CALL ZUNMQR( 'L', 'N', N, N, N, A, LDA, CDUMMY, U, |
CALL ZUNMQR( 'L', 'N', N, N, N, A, LDA, CDUMMY, U, |
$ LDU, CDUMMY, -1, IERR ) |
$ LDU, CDUMMY, -1, IERR ) |
LWRK_ZUNMQR = CDUMMY(1) |
LWRK_ZUNMQR = INT( CDUMMY(1) ) |
IF ( .NOT. JRACC ) THEN |
IF ( .NOT. JRACC ) THEN |
CALL ZGEQP3( N,N, A, LDA, IWORK, CDUMMY,CDUMMY, -1, |
CALL ZGEQP3( N,N, A, LDA, IWORK, CDUMMY,CDUMMY, -1, |
$ RDUMMY, IERR ) |
$ RDUMMY, IERR ) |
LWRK_ZGEQP3N = CDUMMY(1) |
LWRK_ZGEQP3N = INT( CDUMMY(1) ) |
CALL ZGESVJ( 'L', 'U', 'N', N, N, U, LDU, SVA, |
CALL ZGESVJ( 'L', 'U', 'N', N, N, U, LDU, SVA, |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJ = CDUMMY(1) |
LWRK_ZGESVJ = INT( CDUMMY(1) ) |
CALL ZGESVJ( 'U', 'U', 'N', N, N, U, LDU, SVA, |
CALL ZGESVJ( 'U', 'U', 'N', N, N, U, LDU, SVA, |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJU = CDUMMY(1) |
LWRK_ZGESVJU = INT( CDUMMY(1) ) |
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA, |
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA, |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJV = CDUMMY(1) |
LWRK_ZGESVJV = INT( CDUMMY(1) ) |
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY, |
CALL ZUNMLQ( 'L', 'C', N, N, N, A, LDA, CDUMMY, |
$ V, LDV, CDUMMY, -1, IERR ) |
$ V, LDV, CDUMMY, -1, IERR ) |
LWRK_ZUNMLQ = CDUMMY(1) |
LWRK_ZUNMLQ = INT( CDUMMY(1) ) |
IF ( ERREST ) THEN |
IF ( ERREST ) THEN |
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON, |
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON, |
$ 2*N+N**2+LWCON, 2*N+LWRK_ZGEQRF, |
$ 2*N+N**2+LWCON, 2*N+LWRK_ZGEQRF, |
Line 915
|
Line 912
|
ELSE |
ELSE |
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA, |
CALL ZGESVJ( 'L', 'U', 'V', N, N, U, LDU, SVA, |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
$ N, V, LDV, CDUMMY, -1, RDUMMY, -1, IERR ) |
LWRK_ZGESVJV = CDUMMY(1) |
LWRK_ZGESVJV = INT( CDUMMY(1) ) |
CALL ZUNMQR( 'L', 'N', N, N, N, CDUMMY, N, CDUMMY, |
CALL ZUNMQR( 'L', 'N', N, N, N, CDUMMY, N, CDUMMY, |
$ V, LDV, CDUMMY, -1, IERR ) |
$ V, LDV, CDUMMY, -1, IERR ) |
LWRK_ZUNMQR = CDUMMY(1) |
LWRK_ZUNMQR = INT( CDUMMY(1) ) |
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U, |
CALL ZUNMQR( 'L', 'N', M, N, N, A, LDA, CDUMMY, U, |
$ LDU, CDUMMY, -1, IERR ) |
$ LDU, CDUMMY, -1, IERR ) |
LWRK_ZUNMQRM = CDUMMY(1) |
LWRK_ZUNMQRM = INT( CDUMMY(1) ) |
IF ( ERREST ) THEN |
IF ( ERREST ) THEN |
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON, |
OPTWRK = MAX( N+LWRK_ZGEQP3, N+LWCON, |
$ 2*N+LWRK_ZGEQRF, 2*N+N**2, |
$ 2*N+LWRK_ZGEQRF, 2*N+N**2, |
Line 1316
|
Line 1313
|
* (eg speed by replacing global with restricted window pivoting, such |
* (eg speed by replacing global with restricted window pivoting, such |
* as in xGEQPX from TOMS # 782). Good results will be obtained using |
* as in xGEQPX from TOMS # 782). Good results will be obtained using |
* xGEQPX with properly (!) chosen numerical parameters. |
* xGEQPX with properly (!) chosen numerical parameters. |
* Any improvement of ZGEQP3 improves overal performance of ZGEJSV. |
* Any improvement of ZGEQP3 improves overall performance of ZGEJSV. |
* |
* |
* A * P1 = Q1 * [ R1^* 0]^*: |
* A * P1 = Q1 * [ R1^* 0]^*: |
DO 1963 p = 1, N |
DO 1963 p = 1, N |