Skip to content

Commit a7c0392

Browse files
authored
Merge pull request #654 from angsch/tsqr
Improve input arg check lamtsqr
2 parents 2a39774 + 201353b commit a7c0392

File tree

7 files changed

+56
-40
lines changed

7 files changed

+56
-40
lines changed

SRC/clamtsqr.f

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
*> \verbatim
7373
*> MB is INTEGER
7474
*> The block size to be used in the blocked QR.
75-
*> MB > N. (must be the same as DLATSQR)
75+
*> MB > N. (must be the same as CLATSQR)
7676
*> \endverbatim
7777
*>
7878
*> \param[in] NB
@@ -87,7 +87,7 @@
8787
*> A is COMPLEX array, dimension (LDA,K)
8888
*> The i-th column must contain the vector which defines the
8989
*> blockedelementary reflector H(i), for i = 1,2,...,k, as
90-
*> returned by DLATSQR in the first k columns of
90+
*> returned by CLATSQR in the first k columns of
9191
*> its array argument A.
9292
*> \endverbatim
9393
*>
@@ -214,7 +214,7 @@ SUBROUTINE CLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
214214
* ..
215215
* .. Local Scalars ..
216216
LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
217-
INTEGER I, II, KK, LW, CTR
217+
INTEGER I, II, KK, LW, CTR, Q
218218
* ..
219219
* .. External Functions ..
220220
LOGICAL LSAME
@@ -233,22 +233,26 @@ SUBROUTINE CLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
233233
RIGHT = LSAME( SIDE, 'R' )
234234
IF (LEFT) THEN
235235
LW = N * NB
236+
Q = M
236237
ELSE
237238
LW = M * NB
239+
Q = N
238240
END IF
239241
*
240242
INFO = 0
241243
IF( .NOT.LEFT .AND. .NOT.RIGHT ) THEN
242244
INFO = -1
243245
ELSE IF( .NOT.TRAN .AND. .NOT.NOTRAN ) THEN
244246
INFO = -2
245-
ELSE IF( M.LT.0 ) THEN
246-
INFO = -3
247-
ELSE IF( N.LT.0 ) THEN
248-
INFO = -4
249247
ELSE IF( K.LT.0 ) THEN
250248
INFO = -5
251-
ELSE IF( LDA.LT.MAX( 1, K ) ) THEN
249+
ELSE IF( N.LT.K ) THEN
250+
INFO = -4
251+
ELSE IF( M.LT.N ) THEN
252+
INFO = -3
253+
ELSE IF( K.LT.NB .OR. NB.LT.1 ) THEN
254+
INFO = -7
255+
ELSE IF( LDA.LT.MAX( 1, Q ) ) THEN
252256
INFO = -9
253257
ELSE IF( LDT.LT.MAX( 1, NB) ) THEN
254258
INFO = -11

SRC/dgemqrt.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,15 @@
9494
*> NB is INTEGER
9595
*> The block size used for the storage of T. K >= NB >= 1.
9696
*> This must be the same value of NB used to generate T
97-
*> in CGEQRT.
97+
*> in DGEQRT.
9898
*> \endverbatim
9999
*>
100100
*> \param[in] V
101101
*> \verbatim
102102
*> V is DOUBLE PRECISION array, dimension (LDV,K)
103103
*> The i-th column must contain the vector which defines the
104104
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
105-
*> CGEQRT in the first K columns of its array argument A.
105+
*> DGEQRT in the first K columns of its array argument A.
106106
*> \endverbatim
107107
*>
108108
*> \param[in] LDV
@@ -117,7 +117,7 @@
117117
*> \verbatim
118118
*> T is DOUBLE PRECISION array, dimension (LDT,K)
119119
*> The upper triangular factors of the block reflectors
120-
*> as returned by CGEQRT, stored as a NB-by-N matrix.
120+
*> as returned by DGEQRT, stored as a NB-by-N matrix.
121121
*> \endverbatim
122122
*>
123123
*> \param[in] LDT

SRC/dlamtsqr.f

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ SUBROUTINE DLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
214214
* ..
215215
* .. Local Scalars ..
216216
LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
217-
INTEGER I, II, KK, LW, CTR
217+
INTEGER I, II, KK, LW, CTR, Q
218218
* ..
219219
* .. External Functions ..
220220
LOGICAL LSAME
@@ -233,22 +233,26 @@ SUBROUTINE DLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
233233
RIGHT = LSAME( SIDE, 'R' )
234234
IF (LEFT) THEN
235235
LW = N * NB
236+
Q = M
236237
ELSE
237238
LW = MB * NB
239+
Q = N
238240
END IF
239241
*
240242
INFO = 0
241243
IF( .NOT.LEFT .AND. .NOT.RIGHT ) THEN
242244
INFO = -1
243245
ELSE IF( .NOT.TRAN .AND. .NOT.NOTRAN ) THEN
244246
INFO = -2
245-
ELSE IF( M.LT.0 ) THEN
246-
INFO = -3
247-
ELSE IF( N.LT.0 ) THEN
248-
INFO = -4
249247
ELSE IF( K.LT.0 ) THEN
250248
INFO = -5
251-
ELSE IF( LDA.LT.MAX( 1, K ) ) THEN
249+
ELSE IF( N.LT.K ) THEN
250+
INFO = -4
251+
ELSE IF( M.LT.N ) THEN
252+
INFO = -3
253+
ELSE IF( K.LT.NB .OR. NB.LT.1 ) THEN
254+
INFO = -7
255+
ELSE IF( LDA.LT.MAX( 1, Q ) ) THEN
252256
INFO = -9
253257
ELSE IF( LDT.LT.MAX( 1, NB) ) THEN
254258
INFO = -11

SRC/sgemqrt.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,15 @@
9494
*> NB is INTEGER
9595
*> The block size used for the storage of T. K >= NB >= 1.
9696
*> This must be the same value of NB used to generate T
97-
*> in CGEQRT.
97+
*> in SGEQRT.
9898
*> \endverbatim
9999
*>
100100
*> \param[in] V
101101
*> \verbatim
102102
*> V is REAL array, dimension (LDV,K)
103103
*> The i-th column must contain the vector which defines the
104104
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
105-
*> CGEQRT in the first K columns of its array argument A.
105+
*> SGEQRT in the first K columns of its array argument A.
106106
*> \endverbatim
107107
*>
108108
*> \param[in] LDV
@@ -117,7 +117,7 @@
117117
*> \verbatim
118118
*> T is REAL array, dimension (LDT,K)
119119
*> The upper triangular factors of the block reflectors
120-
*> as returned by CGEQRT, stored as a NB-by-N matrix.
120+
*> as returned by SGEQRT, stored as a NB-by-N matrix.
121121
*> \endverbatim
122122
*>
123123
*> \param[in] LDT

SRC/slamtsqr.f

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*> TRANS = 'T': Q**T * C C * Q**T
2828
*> where Q is a real orthogonal matrix defined as the product
2929
*> of blocked elementary reflectors computed by tall skinny
30-
*> QR factorization (DLATSQR)
30+
*> QR factorization (SLATSQR)
3131
*> \endverbatim
3232
*
3333
* Arguments:
@@ -72,7 +72,7 @@
7272
*> \verbatim
7373
*> MB is INTEGER
7474
*> The block size to be used in the blocked QR.
75-
*> MB > N. (must be the same as DLATSQR)
75+
*> MB > N. (must be the same as SLATSQR)
7676
*> \endverbatim
7777
*>
7878
*> \param[in] NB
@@ -87,7 +87,7 @@
8787
*> A is REAL array, dimension (LDA,K)
8888
*> The i-th column must contain the vector which defines the
8989
*> blockedelementary reflector H(i), for i = 1,2,...,k, as
90-
*> returned by DLATSQR in the first k columns of
90+
*> returned by SLATSQR in the first k columns of
9191
*> its array argument A.
9292
*> \endverbatim
9393
*>
@@ -214,7 +214,7 @@ SUBROUTINE SLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
214214
* ..
215215
* .. Local Scalars ..
216216
LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
217-
INTEGER I, II, KK, LW, CTR
217+
INTEGER I, II, KK, LW, CTR, Q
218218
* ..
219219
* .. External Functions ..
220220
LOGICAL LSAME
@@ -233,22 +233,26 @@ SUBROUTINE SLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
233233
RIGHT = LSAME( SIDE, 'R' )
234234
IF (LEFT) THEN
235235
LW = N * NB
236+
Q = M
236237
ELSE
237238
LW = MB * NB
239+
Q = N
238240
END IF
239241
*
240242
INFO = 0
241243
IF( .NOT.LEFT .AND. .NOT.RIGHT ) THEN
242244
INFO = -1
243245
ELSE IF( .NOT.TRAN .AND. .NOT.NOTRAN ) THEN
244246
INFO = -2
245-
ELSE IF( M.LT.0 ) THEN
246-
INFO = -3
247-
ELSE IF( N.LT.0 ) THEN
248-
INFO = -4
249247
ELSE IF( K.LT.0 ) THEN
250248
INFO = -5
251-
ELSE IF( LDA.LT.MAX( 1, K ) ) THEN
249+
ELSE IF( N.LT.K ) THEN
250+
INFO = -4
251+
ELSE IF( M.LT.N ) THEN
252+
INFO = -3
253+
ELSE IF( K.LT.NB .OR. NB.LT.1 ) THEN
254+
INFO = -7
255+
ELSE IF( LDA.LT.MAX( 1, Q ) ) THEN
252256
INFO = -9
253257
ELSE IF( LDT.LT.MAX( 1, NB) ) THEN
254258
INFO = -11

SRC/zgemqrt.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,15 @@
9494
*> NB is INTEGER
9595
*> The block size used for the storage of T. K >= NB >= 1.
9696
*> This must be the same value of NB used to generate T
97-
*> in CGEQRT.
97+
*> in ZGEQRT.
9898
*> \endverbatim
9999
*>
100100
*> \param[in] V
101101
*> \verbatim
102102
*> V is COMPLEX*16 array, dimension (LDV,K)
103103
*> The i-th column must contain the vector which defines the
104104
*> elementary reflector H(i), for i = 1,2,...,k, as returned by
105-
*> CGEQRT in the first K columns of its array argument A.
105+
*> ZGEQRT in the first K columns of its array argument A.
106106
*> \endverbatim
107107
*>
108108
*> \param[in] LDV
@@ -117,7 +117,7 @@
117117
*> \verbatim
118118
*> T is COMPLEX*16 array, dimension (LDT,K)
119119
*> The upper triangular factors of the block reflectors
120-
*> as returned by CGEQRT, stored as a NB-by-N matrix.
120+
*> as returned by ZGEQRT, stored as a NB-by-N matrix.
121121
*> \endverbatim
122122
*>
123123
*> \param[in] LDT

SRC/zlamtsqr.f

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
*> \verbatim
7373
*> MB is INTEGER
7474
*> The block size to be used in the blocked QR.
75-
*> MB > N. (must be the same as DLATSQR)
75+
*> MB > N. (must be the same as ZLATSQR)
7676
*> \endverbatim
7777
*>
7878
*> \param[in] NB
@@ -87,7 +87,7 @@
8787
*> A is COMPLEX*16 array, dimension (LDA,K)
8888
*> The i-th column must contain the vector which defines the
8989
*> blockedelementary reflector H(i), for i = 1,2,...,k, as
90-
*> returned by DLATSQR in the first k columns of
90+
*> returned by ZLATSQR in the first k columns of
9191
*> its array argument A.
9292
*> \endverbatim
9393
*>
@@ -214,7 +214,7 @@ SUBROUTINE ZLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
214214
* ..
215215
* .. Local Scalars ..
216216
LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
217-
INTEGER I, II, KK, LW, CTR
217+
INTEGER I, II, KK, LW, CTR, Q
218218
* ..
219219
* .. External Functions ..
220220
LOGICAL LSAME
@@ -233,22 +233,26 @@ SUBROUTINE ZLAMTSQR( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
233233
RIGHT = LSAME( SIDE, 'R' )
234234
IF (LEFT) THEN
235235
LW = N * NB
236+
Q = M
236237
ELSE
237238
LW = M * NB
239+
Q = N
238240
END IF
239241
*
240242
INFO = 0
241243
IF( .NOT.LEFT .AND. .NOT.RIGHT ) THEN
242244
INFO = -1
243245
ELSE IF( .NOT.TRAN .AND. .NOT.NOTRAN ) THEN
244246
INFO = -2
245-
ELSE IF( M.LT.0 ) THEN
246-
INFO = -3
247-
ELSE IF( N.LT.0 ) THEN
248-
INFO = -4
249247
ELSE IF( K.LT.0 ) THEN
250248
INFO = -5
251-
ELSE IF( LDA.LT.MAX( 1, K ) ) THEN
249+
ELSE IF( N.LT.K ) THEN
250+
INFO = -4
251+
ELSE IF( M.LT.N ) THEN
252+
INFO = -3
253+
ELSE IF( K.LT.NB .OR. NB.LT.1 ) THEN
254+
INFO = -7
255+
ELSE IF( LDA.LT.MAX( 1, Q ) ) THEN
252256
INFO = -9
253257
ELSE IF( LDT.LT.MAX( 1, NB) ) THEN
254258
INFO = -11

0 commit comments

Comments
 (0)