version 1.1, 2012/07/31 11:06:38
|
version 1.10, 2023/08/07 08:39:18
|
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 ZGEMQRT + dependencies |
*> Download ZGEMQRT + dependencies |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zgemqrt.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zgemqrt.f"> |
*> [TGZ]</a> |
*> [TGZ]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zgemqrt.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zgemqrt.f"> |
*> [ZIP]</a> |
*> [ZIP]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgemqrt.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgemqrt.f"> |
*> [TXT]</a> |
*> [TXT]</a> |
*> \endhtmlonly |
*> \endhtmlonly |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
* |
* |
* SUBROUTINE ZGEMQRT( SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, |
* SUBROUTINE ZGEMQRT( SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, |
* C, LDC, WORK, INFO ) |
* C, LDC, WORK, INFO ) |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
* CHARACTER SIDE, TRANS |
* CHARACTER SIDE, TRANS |
* INTEGER INFO, K, LDV, LDC, M, N, NB, LDT |
* INTEGER INFO, K, LDV, LDC, M, N, NB, LDT |
Line 28
|
Line 28
|
* .. Array Arguments .. |
* .. Array Arguments .. |
* COMPLEX*16 V( LDV, * ), C( LDC, * ), T( LDT, * ), WORK( * ) |
* COMPLEX*16 V( LDV, * ), C( LDC, * ), T( LDT, * ), WORK( * ) |
* .. |
* .. |
* |
* |
* |
* |
*> \par Purpose: |
*> \par Purpose: |
* ============= |
* ============= |
Line 46
|
Line 46
|
*> |
*> |
*> Q = H(1) H(2) . . . H(K) = I - V T V**H |
*> Q = H(1) H(2) . . . H(K) = I - V T V**H |
*> |
*> |
*> generated using the compact WY representation as returned by ZGEQRT. |
*> generated using the compact WY representation as returned by ZGEQRT. |
*> |
*> |
*> Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'. |
*> Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'. |
*> \endverbatim |
*> \endverbatim |
Line 65
|
Line 65
|
*> \verbatim |
*> \verbatim |
*> TRANS is CHARACTER*1 |
*> TRANS is CHARACTER*1 |
*> = 'N': No transpose, apply Q; |
*> = 'N': No transpose, apply Q; |
*> = 'C': Transpose, apply Q**H. |
*> = 'C': Conjugate transpose, apply Q**H. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] M |
*> \param[in] M |
Line 94
|
Line 94
|
*> NB is INTEGER |
*> NB is INTEGER |
*> The block size used for the storage of T. K >= NB >= 1. |
*> The block size used for the storage of T. K >= NB >= 1. |
*> This must be the same value of NB used to generate T |
*> This must be the same value of NB used to generate T |
*> in CGEQRT. |
*> in ZGEQRT. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] V |
*> \param[in] V |
Line 102
|
Line 102
|
*> V is COMPLEX*16 array, dimension (LDV,K) |
*> V is COMPLEX*16 array, dimension (LDV,K) |
*> The i-th column must contain the vector which defines the |
*> The i-th column must contain the vector which defines the |
*> elementary reflector H(i), for i = 1,2,...,k, as returned by |
*> elementary reflector H(i), for i = 1,2,...,k, as returned by |
*> CGEQRT in the first K columns of its array argument A. |
*> ZGEQRT in the first K columns of its array argument A. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDV |
*> \param[in] LDV |
Line 117
|
Line 117
|
*> \verbatim |
*> \verbatim |
*> T is COMPLEX*16 array, dimension (LDT,K) |
*> T is COMPLEX*16 array, dimension (LDT,K) |
*> The upper triangular factors of the block reflectors |
*> The upper triangular factors of the block reflectors |
*> as returned by CGEQRT, stored as a NB-by-N matrix. |
*> as returned by ZGEQRT, stored as a NB-by-N matrix. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDT |
*> \param[in] LDT |
Line 155
|
Line 155
|
* 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 |
|
* |
* |
*> \ingroup complex16GEcomputational |
*> \ingroup complex16GEcomputational |
* |
* |
* ===================================================================== |
* ===================================================================== |
SUBROUTINE ZGEMQRT( SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, |
SUBROUTINE ZGEMQRT( SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, |
$ C, LDC, WORK, INFO ) |
$ C, LDC, WORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.4.0) -- |
* -- 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..-- |
* November 2011 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER SIDE, TRANS |
CHARACTER SIDE, TRANS |
Line 207
|
Line 204
|
RIGHT = LSAME( SIDE, 'R' ) |
RIGHT = LSAME( SIDE, 'R' ) |
TRAN = LSAME( TRANS, 'C' ) |
TRAN = LSAME( TRANS, 'C' ) |
NOTRAN = LSAME( TRANS, 'N' ) |
NOTRAN = LSAME( TRANS, 'N' ) |
* |
* |
IF( LEFT ) THEN |
IF( LEFT ) THEN |
LDWORK = MAX( 1, N ) |
LDWORK = MAX( 1, N ) |
Q = M |
Q = M |
Line 225
|
Line 222
|
INFO = -4 |
INFO = -4 |
ELSE IF( K.LT.0 .OR. K.GT.Q ) THEN |
ELSE IF( K.LT.0 .OR. K.GT.Q ) THEN |
INFO = -5 |
INFO = -5 |
ELSE IF( NB.LT.1 .OR. NB.GT.K ) THEN |
ELSE IF( NB.LT.1 .OR. (NB.GT.K .AND. K.GT.0)) THEN |
INFO = -6 |
INFO = -6 |
ELSE IF( LDV.LT.MAX( 1, Q ) ) THEN |
ELSE IF( LDV.LT.MAX( 1, Q ) ) THEN |
INFO = -8 |
INFO = -8 |
Line 248
|
Line 245
|
* |
* |
DO I = 1, K, NB |
DO I = 1, K, NB |
IB = MIN( NB, K-I+1 ) |
IB = MIN( NB, K-I+1 ) |
CALL ZLARFB( 'L', 'C', 'F', 'C', M-I+1, N, IB, |
CALL ZLARFB( 'L', 'C', 'F', 'C', M-I+1, N, IB, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ C( I, 1 ), LDC, WORK, LDWORK ) |
$ C( I, 1 ), LDC, WORK, LDWORK ) |
END DO |
END DO |
* |
* |
ELSE IF( RIGHT .AND. NOTRAN ) THEN |
ELSE IF( RIGHT .AND. NOTRAN ) THEN |
* |
* |
DO I = 1, K, NB |
DO I = 1, K, NB |
IB = MIN( NB, K-I+1 ) |
IB = MIN( NB, K-I+1 ) |
CALL ZLARFB( 'R', 'N', 'F', 'C', M, N-I+1, IB, |
CALL ZLARFB( 'R', 'N', 'F', 'C', M, N-I+1, IB, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ C( 1, I ), LDC, WORK, LDWORK ) |
$ C( 1, I ), LDC, WORK, LDWORK ) |
END DO |
END DO |
* |
* |
Line 266
|
Line 263
|
* |
* |
KF = ((K-1)/NB)*NB+1 |
KF = ((K-1)/NB)*NB+1 |
DO I = KF, 1, -NB |
DO I = KF, 1, -NB |
IB = MIN( NB, K-I+1 ) |
IB = MIN( NB, K-I+1 ) |
CALL ZLARFB( 'L', 'N', 'F', 'C', M-I+1, N, IB, |
CALL ZLARFB( 'L', 'N', 'F', 'C', M-I+1, N, IB, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ C( I, 1 ), LDC, WORK, LDWORK ) |
$ C( I, 1 ), LDC, WORK, LDWORK ) |
END DO |
END DO |
* |
* |
Line 276
|
Line 273
|
* |
* |
KF = ((K-1)/NB)*NB+1 |
KF = ((K-1)/NB)*NB+1 |
DO I = KF, 1, -NB |
DO I = KF, 1, -NB |
IB = MIN( NB, K-I+1 ) |
IB = MIN( NB, K-I+1 ) |
CALL ZLARFB( 'R', 'C', 'F', 'C', M, N-I+1, IB, |
CALL ZLARFB( 'R', 'C', 'F', 'C', M, N-I+1, IB, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ V( I, I ), LDV, T( 1, I ), LDT, |
$ C( 1, I ), LDC, WORK, LDWORK ) |
$ C( 1, I ), LDC, WORK, LDWORK ) |
END DO |
END DO |
* |
* |