version 1.2, 2017/06/17 11:06:54
|
version 1.6, 2023/08/07 08:39:29
|
Line 1
|
Line 1
|
|
*> \brief \b ZLAMTSQR |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
Line 23
|
Line 24
|
*> |
*> |
*> SIDE = 'L' SIDE = 'R' |
*> SIDE = 'L' SIDE = 'R' |
*> TRANS = 'N': Q * C C * Q |
*> TRANS = 'N': Q * C C * Q |
*> TRANS = 'C': Q**C * C C * Q**C |
*> TRANS = 'C': Q**H * C C * Q**H |
*> where Q is a real orthogonal matrix defined as the product |
*> where Q is a complex unitary matrix defined as the product |
*> of blocked elementary reflectors computed by tall skinny |
*> of blocked elementary reflectors computed by tall skinny |
*> QR factorization (ZLATSQR) |
*> QR factorization (ZLATSQR) |
*> \endverbatim |
*> \endverbatim |
Line 35
|
Line 36
|
*> \param[in] SIDE |
*> \param[in] SIDE |
*> \verbatim |
*> \verbatim |
*> SIDE is CHARACTER*1 |
*> SIDE is CHARACTER*1 |
*> = 'L': apply Q or Q**T from the Left; |
*> = 'L': apply Q or Q**H from the Left; |
*> = 'R': apply Q or Q**T from the Right. |
*> = 'R': apply Q or Q**H from the Right. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] TRANS |
*> \param[in] TRANS |
*> \verbatim |
*> \verbatim |
*> TRANS is CHARACTER*1 |
*> TRANS is CHARACTER*1 |
*> = 'N': No transpose, apply Q; |
*> = 'N': No transpose, apply Q; |
*> = 'C': Conjugate Transpose, apply Q**C. |
*> = 'C': Conjugate Transpose, apply Q**H. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] M |
*> \param[in] M |
Line 55
|
Line 56
|
*> \param[in] N |
*> \param[in] N |
*> \verbatim |
*> \verbatim |
*> N is INTEGER |
*> N is INTEGER |
*> The number of columns of the matrix C. M >= N >= 0. |
*> The number of columns of the matrix C. N >= 0. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] K |
*> \param[in] K |
*> \verbatim |
*> \verbatim |
*> K is INTEGER |
*> K is INTEGER |
*> The number of elementary reflectors whose product defines |
*> The number of elementary reflectors whose product defines |
*> the matrix Q. |
*> the matrix Q. M >= K >= 0; |
*> N >= K >= 0; |
|
*> |
*> |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
Line 71
|
Line 71
|
*> \verbatim |
*> \verbatim |
*> MB is INTEGER |
*> MB is INTEGER |
*> The block size to be used in the blocked QR. |
*> The block size to be used in the blocked QR. |
*> MB > N. (must be the same as DLATSQR) |
*> MB > N. (must be the same as ZLATSQR) |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] NB |
*> \param[in] NB |
Line 81
|
Line 81
|
*> N >= NB >= 1. |
*> N >= NB >= 1. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] A |
*> \param[in] A |
*> \verbatim |
*> \verbatim |
*> A is COMPLEX*16 array, dimension (LDA,K) |
*> A is COMPLEX*16 array, dimension (LDA,K) |
*> The i-th column must contain the vector which defines the |
*> The i-th column must contain the vector which defines the |
*> blockedelementary reflector H(i), for i = 1,2,...,k, as |
*> blockedelementary reflector H(i), for i = 1,2,...,k, as |
*> returned by DLATSQR in the first k columns of |
*> returned by ZLATSQR in the first k columns of |
*> its array argument A. |
*> its array argument A. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
Line 117
|
Line 117
|
*> \verbatim |
*> \verbatim |
*> C is COMPLEX*16 array, dimension (LDC,N) |
*> C is COMPLEX*16 array, dimension (LDC,N) |
*> On entry, the M-by-N matrix C. |
*> On entry, the M-by-N matrix C. |
*> On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. |
*> On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LDC |
*> \param[in] LDC |
Line 163
|
Line 163
|
* ===================== |
* ===================== |
*> |
*> |
*> \verbatim |
*> \verbatim |
*> Tall-Skinny QR (TSQR) performs QR by a sequence of orthogonal transformations, |
*> Tall-Skinny QR (TSQR) performs QR by a sequence of unitary transformations, |
*> representing Q as a product of other orthogonal matrices |
*> representing Q as a product of other unitary matrices |
*> Q = Q(1) * Q(2) * . . . * Q(k) |
*> Q = Q(1) * Q(2) * . . . * Q(k) |
*> where each Q(i) zeros out subdiagonal entries of a block of MB rows of A: |
*> where each Q(i) zeros out subdiagonal entries of a block of MB rows of A: |
*> Q(1) zeros out the subdiagonal entries of rows 1:MB of A |
*> Q(1) zeros out the subdiagonal entries of rows 1:MB of A |
Line 195
|
Line 195
|
SUBROUTINE ZLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, |
SUBROUTINE ZLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, |
$ LDT, C, LDC, WORK, LWORK, INFO ) |
$ LDT, C, LDC, WORK, LWORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.7.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..-- |
* December 2016 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER SIDE, TRANS |
CHARACTER SIDE, TRANS |
Line 214
|
Line 213
|
* .. |
* .. |
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY |
LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY |
INTEGER I, II, KK, LW, CTR |
INTEGER I, II, KK, LW, CTR, Q |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
LOGICAL LSAME |
LOGICAL LSAME |
Line 233
|
Line 232
|
RIGHT = LSAME( SIDE, 'R' ) |
RIGHT = LSAME( SIDE, 'R' ) |
IF (LEFT) THEN |
IF (LEFT) THEN |
LW = N * NB |
LW = N * NB |
|
Q = M |
ELSE |
ELSE |
LW = M * NB |
LW = M * NB |
|
Q = N |
END IF |
END IF |
* |
* |
INFO = 0 |
INFO = 0 |
Line 242
|
Line 243
|
INFO = -1 |
INFO = -1 |
ELSE IF( .NOT.TRAN .AND. .NOT.NOTRAN ) THEN |
ELSE IF( .NOT.TRAN .AND. .NOT.NOTRAN ) THEN |
INFO = -2 |
INFO = -2 |
ELSE IF( M.LT.0 ) THEN |
ELSE IF( M.LT.K ) THEN |
INFO = -3 |
INFO = -3 |
ELSE IF( N.LT.0 ) THEN |
ELSE IF( N.LT.0 ) THEN |
INFO = -4 |
INFO = -4 |
ELSE IF( K.LT.0 ) THEN |
ELSE IF( K.LT.0 ) THEN |
INFO = -5 |
INFO = -5 |
ELSE IF( LDA.LT.MAX( 1, K ) ) THEN |
ELSE IF( K.LT.NB .OR. NB.LT.1 ) THEN |
|
INFO = -7 |
|
ELSE IF( LDA.LT.MAX( 1, Q ) ) THEN |
INFO = -9 |
INFO = -9 |
ELSE IF( LDT.LT.MAX( 1, NB) ) THEN |
ELSE IF( LDT.LT.MAX( 1, NB) ) THEN |
INFO = -11 |
INFO = -11 |