Skip to content

Commit 280e161

Browse files
committed
add missed usage of sroundup_lwork in several functions
1 parent cd7523d commit 280e161

25 files changed

+42
-32
lines changed

SRC/cgehrd.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
274274
*
275275
* Determine if workspace is large enough for blocked code
276276
*
277-
IF( LWORK.LT.N*NB+TSIZE ) THEN
277+
IF( LWORK.LT.LWKOPT ) THEN
278278
*
279279
* Not enough workspace to use optimal NB: determine the
280280
* minimum value of NB, and reduce NB or force use of

SRC/cgeqr.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ SUBROUTINE CGEQR( M, N, A, LDA, T, TSIZE, WORK, LWORK,
273273
ELSE IF( TSIZE.LT.MAX( 1, NB*N*NBLCKS + 5 )
274274
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
275275
INFO = -6
276-
ELSE IF( ( LWORK.LT.MAX( 1, N*NB ) ) .AND. ( .NOT.LQUERY )
276+
ELSE IF( ( LWORK.LT.LWREQ ) .AND. ( .NOT.LQUERY )
277277
$ .AND. ( .NOT.LMINWS ) ) THEN
278278
INFO = -8
279279
END IF

SRC/cgesvdx.f

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@
208208
*> \param[out] WORK
209209
*> \verbatim
210210
*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
211-
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK;
211+
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
212212
*> \endverbatim
213213
*>
214214
*> \param[in] LWORK
@@ -312,8 +312,8 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
312312
* .. External Functions ..
313313
LOGICAL LSAME
314314
INTEGER ILAENV
315-
REAL SLAMCH, CLANGE
316-
EXTERNAL LSAME, ILAENV, SLAMCH, CLANGE
315+
REAL SLAMCH, CLANGE, SROUNDUP_LWORK
316+
EXTERNAL LSAME, ILAENV, SLAMCH, CLANGE, SROUNDUP_LWORK
317317
* ..
318318
* .. Intrinsic Functions ..
319319
INTRINSIC MAX, MIN, SQRT
@@ -448,7 +448,7 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
448448
END IF
449449
END IF
450450
MAXWRK = MAX( MAXWRK, MINWRK )
451-
WORK( 1 ) = CMPLX( REAL( MAXWRK ), ZERO )
451+
WORK( 1 ) = SROUNDUP_LWORK( MAXWRK )
452452
*
453453
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
454454
INFO = -19
@@ -846,7 +846,7 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
846846
*
847847
* Return optimal workspace in WORK(1)
848848
*
849-
WORK( 1 ) = CMPLX( REAL( MAXWRK ), ZERO )
849+
WORK( 1 ) = SROUNDUP_LWORK( MAXWRK )
850850
*
851851
RETURN
852852
*

SRC/cgghd3.f

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,8 @@ SUBROUTINE CGGHD3( COMPQ, COMPZ, N, ILO, IHI, A, LDA, B, LDB, Q,
893893
IF ( JCOL.LT.IHI )
894894
$ CALL CGGHRD( COMPQ2, COMPZ2, N, JCOL, IHI, A, LDA, B, LDB, Q,
895895
$ LDQ, Z, LDZ, IERR )
896-
WORK( 1 ) = CMPLX( LWKOPT )
896+
*
897+
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
897898
*
898899
RETURN
899900
*

SRC/cheevd.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,8 @@ SUBROUTINE CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK,
281281
LROPT = LRWMIN
282282
LIOPT = LIWMIN
283283
END IF
284-
WORK( 1 ) = SROUNDUP_LWORK(LOPT)
285-
RWORK( 1 ) = LROPT
284+
WORK( 1 ) = SROUNDUP_LWORK( LOPT )
285+
RWORK( 1 ) = SROUNDUP_LWORK( LROPT )
286286
IWORK( 1 ) = LIOPT
287287
*
288288
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
@@ -377,8 +377,8 @@ SUBROUTINE CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK,
377377
CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
378378
END IF
379379
*
380-
WORK( 1 ) = SROUNDUP_LWORK(LOPT)
381-
RWORK( 1 ) = LROPT
380+
WORK( 1 ) = SROUNDUP_LWORK( LOPT )
381+
RWORK( 1 ) = SROUNDUP_LWORK( LROPT )
382382
IWORK( 1 ) = LIOPT
383383
*
384384
RETURN

SRC/chetrf.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ SUBROUTINE CHETRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
228228
* Determine the block size
229229
*
230230
NB = ILAENV( 1, 'CHETRF', UPLO, N, -1, -1, -1 )
231-
LWKOPT = N*NB
231+
LWKOPT = MAX( 1, N*NB )
232232
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
233233
END IF
234234
*

SRC/chetrf_rk.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ SUBROUTINE CHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, LWORK,
311311
* Determine the block size
312312
*
313313
NB = ILAENV( 1, 'CHETRF_RK', UPLO, N, -1, -1, -1 )
314-
LWKOPT = N*NB
314+
LWKOPT = MAX( 1, N*NB )
315315
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
316316
END IF
317317
*

SRC/chetri2.f

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ SUBROUTINE CHETRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
178178
INFO = -2
179179
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
180180
INFO = -4
181-
ELSE IF ( LWORK.LT.MINSIZE .AND. .NOT.LQUERY ) THEN
181+
ELSE IF( LWORK.LT.MINSIZE .AND. .NOT.LQUERY ) THEN
182182
INFO = -7
183183
END IF
184184
*
@@ -195,11 +195,12 @@ SUBROUTINE CHETRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
195195
IF( N.EQ.0 )
196196
$ RETURN
197197

198-
IF( NBMAX .GE. N ) THEN
198+
IF( NBMAX.GE.N ) THEN
199199
CALL CHETRI( UPLO, N, A, LDA, IPIV, WORK, INFO )
200200
ELSE
201201
CALL CHETRI2X( UPLO, N, A, LDA, IPIV, WORK, NBMAX, INFO )
202202
END IF
203+
*
203204
RETURN
204205
*
205206
* End of CHETRI2

SRC/chetrs_aa.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ SUBROUTINE CHETRS_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB,
204204
*
205205
* Quick return if possible
206206
*
207-
IF( N.EQ.0 .OR. NRHS.EQ.0 )
207+
IF( MIN( N, NRHS ).EQ.0 )
208208
$ RETURN
209209
*
210210
IF( UPPER ) THEN

SRC/dgehrd.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
273273
*
274274
* Determine if workspace is large enough for blocked code
275275
*
276-
IF( LWORK.LT.N*NB+TSIZE ) THEN
276+
IF( LWORK.LT.LWKOPT ) THEN
277277
*
278278
* Not enough workspace to use optimal NB: determine the
279279
* minimum value of NB, and reduce NB or force use of

SRC/dgghd3.f

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,7 @@ SUBROUTINE DGGHD3( COMPQ, COMPZ, N, ILO, IHI, A, LDA, B, LDB, Q,
889889
IF ( JCOL.LT.IHI )
890890
$ CALL DGGHRD( COMPQ2, COMPZ2, N, JCOL, IHI, A, LDA, B, LDB, Q,
891891
$ LDQ, Z, LDZ, IERR )
892+
*
892893
WORK( 1 ) = DBLE( LWKOPT )
893894
*
894895
RETURN

SRC/dsytrf.f

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ SUBROUTINE DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
352352
END IF
353353
*
354354
40 CONTINUE
355+
*
355356
WORK( 1 ) = LWKOPT
356357
RETURN
357358
*

SRC/dsytri2.f

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ SUBROUTINE DSYTRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
165165
NBMAX = ILAENV( 1, 'DSYTRI2', UPLO, N, -1, -1, -1 )
166166
IF( N.EQ.0 ) THEN
167167
MINSIZE = 1
168-
ELSE IF ( NBMAX.GE.N ) THEN
168+
ELSE IF( NBMAX.GE.N ) THEN
169169
MINSIZE = N
170170
ELSE
171171
MINSIZE = (N+NBMAX+1)*(NBMAX+3)
@@ -177,7 +177,7 @@ SUBROUTINE DSYTRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
177177
INFO = -2
178178
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
179179
INFO = -4
180-
ELSE IF ( LWORK.LT.MINSIZE .AND. .NOT.LQUERY ) THEN
180+
ELSE IF( LWORK.LT.MINSIZE .AND. .NOT.LQUERY ) THEN
181181
INFO = -7
182182
END IF
183183
*
@@ -194,11 +194,12 @@ SUBROUTINE DSYTRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
194194
IF( N.EQ.0 )
195195
$ RETURN
196196

197-
IF( NBMAX .GE. N ) THEN
197+
IF( NBMAX.GE.N ) THEN
198198
CALL DSYTRI( UPLO, N, A, LDA, IPIV, WORK, INFO )
199199
ELSE
200200
CALL DSYTRI2X( UPLO, N, A, LDA, IPIV, WORK, NBMAX, INFO )
201201
END IF
202+
*
202203
RETURN
203204
*
204205
* End of DSYTRI2

SRC/sgehrd.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ SUBROUTINE SGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
274274
*
275275
* Determine if workspace is large enough for blocked code
276276
*
277-
IF( LWORK.LT.N*NB+TSIZE ) THEN
277+
IF( LWORK.LT.LWKOPT ) THEN
278278
*
279279
* Not enough workspace to use optimal NB: determine the
280280
* minimum value of NB, and reduce NB or force use of

SRC/sgeqp3rk.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,7 @@ SUBROUTINE SGEQP3RK( M, N, NRHS, KMAX, ABSTOL, RELTOL, A, LDA,
824824
DO J = 1, MINMN
825825
TAU( J ) = ZERO
826826
END DO
827-
WORK( 1 ) = REAL( LWKOPT )
827+
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
828828
RETURN
829829
END IF
830830
*

SRC/ssytrf.f

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ SUBROUTINE SSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
234234
*
235235
NB = ILAENV( 1, 'SSYTRF', UPLO, N, -1, -1, -1 )
236236
LWKOPT = MAX( 1, N*NB )
237-
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
237+
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
238238
END IF
239239
*
240240
IF( INFO.NE.0 ) THEN
@@ -353,7 +353,8 @@ SUBROUTINE SSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
353353
END IF
354354
*
355355
40 CONTINUE
356-
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
356+
*
357+
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
357358
RETURN
358359
*
359360
* End of SSYTRF

SRC/ssytri2.f

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ SUBROUTINE SSYTRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
200200
ELSE
201201
CALL SSYTRI2X( UPLO, N, A, LDA, IPIV, WORK, NBMAX, INFO )
202202
END IF
203+
*
203204
RETURN
204205
*
205206
* End of SSYTRI2

SRC/zgehrd.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
273273
*
274274
* Determine if workspace is large enough for blocked code
275275
*
276-
IF( LWORK.LT.N*NB+TSIZE ) THEN
276+
IF( LWORK.LT.LWKOPT ) THEN
277277
*
278278
* Not enough workspace to use optimal NB: determine the
279279
* minimum value of NB, and reduce NB or force use of

SRC/zgeqr.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ SUBROUTINE ZGEQR( M, N, A, LDA, T, TSIZE, WORK, LWORK,
272272
ELSE IF( TSIZE.LT.MAX( 1, NB*N*NBLCKS + 5 )
273273
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
274274
INFO = -6
275-
ELSE IF( ( LWORK.LT.MAX( 1, N*NB ) ) .AND. ( .NOT.LQUERY )
275+
ELSE IF( ( LWORK.LT.LWREQ ) .AND. ( .NOT.LQUERY )
276276
$ .AND. ( .NOT.LMINWS ) ) THEN
277277
INFO = -8
278278
END IF

SRC/zgghd3.f

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,7 @@ SUBROUTINE ZGGHD3( COMPQ, COMPZ, N, ILO, IHI, A, LDA, B, LDB, Q,
887887
IF ( JCOL.LT.IHI )
888888
$ CALL ZGGHRD( COMPQ2, COMPZ2, N, JCOL, IHI, A, LDA, B, LDB, Q,
889889
$ LDQ, Z, LDZ, IERR )
890+
*
890891
WORK( 1 ) = DCMPLX( LWKOPT )
891892
*
892893
RETURN

SRC/zhetrf.f

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ SUBROUTINE ZHETRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
227227
* Determine the block size
228228
*
229229
NB = ILAENV( 1, 'ZHETRF', UPLO, N, -1, -1, -1 )
230-
LWKOPT = N*NB
230+
LWKOPT = MAX( 1, N*NB )
231231
WORK( 1 ) = LWKOPT
232232
END IF
233233
*
@@ -346,6 +346,7 @@ SUBROUTINE ZHETRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
346346
END IF
347347
*
348348
40 CONTINUE
349+
*
349350
WORK( 1 ) = LWKOPT
350351
RETURN
351352
*

SRC/zhetrf_rk.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ SUBROUTINE ZHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, LWORK,
310310
* Determine the block size
311311
*
312312
NB = ILAENV( 1, 'ZHETRF_RK', UPLO, N, -1, -1, -1 )
313-
LWKOPT = N*NB
313+
LWKOPT = MAX( 1, N*NB )
314314
WORK( 1 ) = LWKOPT
315315
END IF
316316
*

SRC/zhetri2.f

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ SUBROUTINE ZHETRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
199199
ELSE
200200
CALL ZHETRI2X( UPLO, N, A, LDA, IPIV, WORK, NBMAX, INFO )
201201
END IF
202+
*
202203
RETURN
203204
*
204205
* End of ZHETRI2

SRC/zhetrs_aa.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ SUBROUTINE ZHETRS_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB,
204204
*
205205
* Quick return if possible
206206
*
207-
IF( N.EQ.0 .OR. NRHS.EQ.0 )
207+
IF( MIN( N, NRHS ).EQ.0 )
208208
$ RETURN
209209
*
210210
IF( UPPER ) THEN

SRC/zlatsqr.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
*> LWORK >= 1, if MIN(M,N) = 0, and LWORK >= NB*N, otherwise.
113113
*>
114114
*> If LWORK = -1, then a workspace query is assumed; the routine
115-
*> only calculates the optimal size of the WORK array, returns
115+
*> only calculates the minimal size of the WORK array, returns
116116
*> this value as the first entry of the WORK array, and no error
117117
*> message related to LWORK is issued by XERBLA.
118118
*> \endverbatim
@@ -252,7 +252,7 @@ SUBROUTINE ZLATSQR( M, N, MB, NB, A, LDA, T, LDT, WORK,
252252
RETURN
253253
END IF
254254
KK = MOD((M-N),(MB-N))
255-
II=M-KK+1
255+
II = M-KK+1
256256
*
257257
* Compute the QR factorization of the first block A(1:MB,1:N)
258258
*

0 commit comments

Comments
 (0)