Skip to content

Commit 677e42d

Browse files
authored
Fixes from netlib PR 253
When minimal workspace is given in ?hesv_aa, ?sysv_aa, ?hesv_aa_2stage, ?sysv_aa_2stage, now no error is given Quick return for ?laqr1
1 parent e2a8c35 commit 677e42d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+155
-101
lines changed

lapack-netlib/SRC/cgejsv.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,7 @@ SUBROUTINE CGEJSV( JOBA, JOBU, JOBV, JOBR, JOBT, JOBP,
701701
LWSVDJ = MAX( 2 * N, 1 )
702702
LWSVDJV = MAX( 2 * N, 1 )
703703
* .. minimal REAL workspace length for CGEQP3, CPOCON, CGESVJ
704-
LRWQP3 = N
704+
LRWQP3 = 2 * N
705705
LRWCON = N
706706
LRWSVDJ = N
707707
IF ( LQUERY ) THEN
@@ -939,7 +939,7 @@ SUBROUTINE CGEJSV( JOBA, JOBU, JOBV, JOBR, JOBT, JOBP,
939939
END IF
940940
END IF
941941
MINWRK = MAX( 2, MINWRK )
942-
OPTWRK = MAX( 2, OPTWRK )
942+
OPTWRK = MAX( OPTWRK, MINWRK )
943943
IF ( LWORK .LT. MINWRK .AND. (.NOT.LQUERY) ) INFO = - 17
944944
IF ( LRWORK .LT. MINRWRK .AND. (.NOT.LQUERY) ) INFO = - 19
945945
END IF

lapack-netlib/SRC/chesv_aa.f

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ SUBROUTINE CHESV_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
209209
INFO = -5
210210
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
211211
INFO = -8
212+
ELSE IF( LWORK.LT.MAX( 2*N, 3*N-2 ) .AND. .NOT.LQUERY ) THEN
213+
INFO = -10
212214
END IF
213215
*
214216
IF( INFO.EQ.0 ) THEN
@@ -219,9 +221,6 @@ SUBROUTINE CHESV_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
219221
LWKOPT_HETRS = INT( WORK(1) )
220222
LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS )
221223
WORK( 1 ) = LWKOPT
222-
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
223-
INFO = -10
224-
END IF
225224
END IF
226225
*
227226
IF( INFO.NE.0 ) THEN

lapack-netlib/SRC/chesv_aa_2stage.f

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
*>
106106
*> \param[in] LTB
107107
*> \verbatim
108+
*> LTB is INTEGER
108109
*> The size of the array TB. LTB >= 4*N, internally
109110
*> used to select NB such that LTB >= (3*NB+1)*N.
110111
*>
@@ -124,7 +125,7 @@
124125
*>
125126
*> \param[out] IPIV2
126127
*> \verbatim
127-
*> IPIV is INTEGER array, dimension (N)
128+
*> IPIV2 is INTEGER array, dimension (N)
128129
*> On exit, it contains the details of the interchanges, i.e.,
129130
*> the row and column k of T were interchanged with the
130131
*> row and column IPIV(k).
@@ -150,6 +151,7 @@
150151
*>
151152
*> \param[in] LWORK
152153
*> \verbatim
154+
*> LWORK is INTEGER
153155
*> The size of WORK. LWORK >= N, internally used to select NB
154156
*> such that LWORK >= N*NB.
155157
*>
@@ -233,19 +235,18 @@ SUBROUTINE CHESV_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB,
233235
INFO = -3
234236
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
235237
INFO = -5
238+
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
239+
INFO = -7
236240
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
237241
INFO = -11
242+
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
243+
INFO = -13
238244
END IF
239245
*
240246
IF( INFO.EQ.0 ) THEN
241247
CALL CHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
242248
$ IPIV2, WORK, -1, INFO )
243249
LWKOPT = INT( WORK(1) )
244-
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
245-
INFO = -7
246-
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
247-
INFO = -13
248-
END IF
249250
END IF
250251
*
251252
IF( INFO.NE.0 ) THEN
@@ -270,6 +271,8 @@ SUBROUTINE CHESV_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB,
270271
END IF
271272
*
272273
WORK( 1 ) = LWKOPT
274+
*
275+
RETURN
273276
*
274277
* End of CHESV_AA_2STAGE
275278
*

lapack-netlib/SRC/chetrf_aa_2stage.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
*>
9494
*> \param[in] LTB
9595
*> \verbatim
96+
*> LTB is INTEGER
9697
*> The size of the array TB. LTB >= 4*N, internally
9798
*> used to select NB such that LTB >= (3*NB+1)*N.
9899
*>
@@ -112,7 +113,7 @@
112113
*>
113114
*> \param[out] IPIV2
114115
*> \verbatim
115-
*> IPIV is INTEGER array, dimension (N)
116+
*> IPIV2 is INTEGER array, dimension (N)
116117
*> On exit, it contains the details of the interchanges, i.e.,
117118
*> the row and column k of T were interchanged with the
118119
*> row and column IPIV(k).
@@ -125,6 +126,7 @@
125126
*>
126127
*> \param[in] LWORK
127128
*> \verbatim
129+
*> LWORK is INTEGER
128130
*> The size of WORK. LWORK >= N, internally used to select NB
129131
*> such that LWORK >= N*NB.
130132
*>
@@ -658,6 +660,8 @@ SUBROUTINE CHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
658660
*
659661
* Factor the band matrix
660662
CALL CGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
663+
*
664+
RETURN
661665
*
662666
* End of CHETRF_AA_2STAGE
663667
*

lapack-netlib/SRC/chetrs_aa_2stage.f

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
*>
8888
*> \param[in] LTB
8989
*> \verbatim
90+
*> LTB is INTEGER
9091
*> The size of the array TB. LTB >= 4*N.
9192
*> \endverbatim
9293
*>

lapack-netlib/SRC/cla_syamv.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ SUBROUTINE CLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y,
241241
INFO = 10
242242
END IF
243243
IF( INFO.NE.0 )THEN
244-
CALL XERBLA( 'SSYMV ', INFO )
244+
CALL XERBLA( 'CLA_SYAMV', INFO )
245245
RETURN
246246
END IF
247247
*

lapack-netlib/SRC/claqr1.f

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ SUBROUTINE CLAQR1( N, H, LDH, S1, S2, V )
142142
CABS1( CDUM ) = ABS( REAL( CDUM ) ) + ABS( AIMAG( CDUM ) )
143143
* ..
144144
* .. Executable Statements ..
145+
*
146+
* Quick return if possible
147+
*
148+
IF( N.NE.2 .AND. N.NE.3 ) THEN
149+
RETURN
150+
END IF
151+
*
145152
IF( N.EQ.2 ) THEN
146153
S = CABS1( H( 1, 1 )-S2 ) + CABS1( H( 2, 1 ) )
147154
IF( S.EQ.RZERO ) THEN

lapack-netlib/SRC/csysv_aa.f

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,6 @@ SUBROUTINE CSYSV_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
221221
LWKOPT_SYTRS = INT( WORK(1) )
222222
LWKOPT = MAX( LWKOPT_SYTRF, LWKOPT_SYTRS )
223223
WORK( 1 ) = LWKOPT
224-
IF( LWORK.LT.LWKOPT .AND. .NOT.LQUERY ) THEN
225-
INFO = -10
226-
END IF
227224
END IF
228225
*
229226
IF( INFO.NE.0 ) THEN

lapack-netlib/SRC/csysv_aa_2stage.f

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
*>
106106
*> \param[in] LTB
107107
*> \verbatim
108+
*> LTB is INTEGER
108109
*> The size of the array TB. LTB >= 4*N, internally
109110
*> used to select NB such that LTB >= (3*NB+1)*N.
110111
*>
@@ -124,7 +125,7 @@
124125
*>
125126
*> \param[out] IPIV2
126127
*> \verbatim
127-
*> IPIV is INTEGER array, dimension (N)
128+
*> IPIV2 is INTEGER array, dimension (N)
128129
*> On exit, it contains the details of the interchanges, i.e.,
129130
*> the row and column k of T were interchanged with the
130131
*> row and column IPIV(k).
@@ -150,6 +151,7 @@
150151
*>
151152
*> \param[in] LWORK
152153
*> \verbatim
154+
*> LWORK is INTEGER
153155
*> The size of WORK. LWORK >= N, internally used to select NB
154156
*> such that LWORK >= N*NB.
155157
*>
@@ -233,19 +235,18 @@ SUBROUTINE CSYSV_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB,
233235
INFO = -3
234236
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
235237
INFO = -5
238+
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN
239+
INFO = -7
236240
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
237241
INFO = -11
242+
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN
243+
INFO = -13
238244
END IF
239245
*
240246
IF( INFO.EQ.0 ) THEN
241247
CALL CSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV,
242248
$ IPIV2, WORK, -1, INFO )
243249
LWKOPT = INT( WORK(1) )
244-
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN
245-
INFO = -7
246-
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN
247-
INFO = -13
248-
END IF
249250
END IF
250251
*
251252
IF( INFO.NE.0 ) THEN
@@ -270,6 +271,8 @@ SUBROUTINE CSYSV_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB,
270271
END IF
271272
*
272273
WORK( 1 ) = LWKOPT
274+
*
275+
RETURN
273276
*
274277
* End of CSYSV_AA_2STAGE
275278
*

lapack-netlib/SRC/csytrf_aa_2stage.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
*>
9494
*> \param[in] LTB
9595
*> \verbatim
96+
*> LTB is INTEGER
9697
*> The size of the array TB. LTB >= 4*N, internally
9798
*> used to select NB such that LTB >= (3*NB+1)*N.
9899
*>
@@ -112,7 +113,7 @@
112113
*>
113114
*> \param[out] IPIV2
114115
*> \verbatim
115-
*> IPIV is INTEGER array, dimension (N)
116+
*> IPIV2 is INTEGER array, dimension (N)
116117
*> On exit, it contains the details of the interchanges, i.e.,
117118
*> the row and column k of T were interchanged with the
118119
*> row and column IPIV(k).
@@ -125,6 +126,7 @@
125126
*>
126127
*> \param[in] LWORK
127128
*> \verbatim
129+
*> LWORK is INTEGER
128130
*> The size of WORK. LWORK >= N, internally used to select NB
129131
*> such that LWORK >= N*NB.
130132
*>
@@ -662,6 +664,8 @@ SUBROUTINE CSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
662664
*
663665
* Factor the band matrix
664666
CALL CGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
667+
*
668+
RETURN
665669
*
666670
* End of CSYTRF_AA_2STAGE
667671
*

0 commit comments

Comments
 (0)