Skip to content

Commit 1638202

Browse files
authored
Merge pull request #904 from kleineLi/apply-roundup_lwork-in-lapack
Apply ROUNDUP_LWORK function in lapack
2 parents 02ea2d3 + 88810e4 commit 1638202

File tree

217 files changed

+896
-725
lines changed

Some content is hidden

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

217 files changed

+896
-725
lines changed

SRC/VARIANTS/qr/LL/cgeqrf.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
EXTERNAL ILAENV
179+
REAL SROUNDUP_LWORK
180+
EXTERNAL ILAENV, SROUNDUP_LWORK
180181
* ..
181182
* .. Executable Statements ..
182183

@@ -225,13 +226,13 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
225226
* Optimal workspace for dlarfb = MAX(1,N)*NT
226227
*
227228
LWKOPT = (LBWORK+LLWORK)*NB
228-
WORK( 1 ) = (LWKOPT+NT*NT)
229+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT+NT*NT)
229230

230231
ELSE
231232

232233
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
233234
LWKOPT = (LBWORK+LLWORK-NB)*NB
234-
WORK( 1 ) = LWKOPT
235+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
235236

236237
END IF
237238

@@ -413,7 +414,7 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
413414

414415
END IF
415416

416-
WORK( 1 ) = IWS
417+
WORK( 1 ) = SROUNDUP_LWORK(IWS)
417418
RETURN
418419
*
419420
* End of CGEQRF

SRC/VARIANTS/qr/LL/dgeqrf.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
EXTERNAL ILAENV
179+
DOUBLE PRECISION DROUNDUP_LWORK
180+
EXTERNAL ILAENV, DROUNDUP_LWORK
180181
* ..
181182
* .. Executable Statements ..
182183

@@ -225,13 +226,13 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
225226
* Optimal workspace for dlarfb = MAX(1,N)*NT
226227
*
227228
LWKOPT = (LBWORK+LLWORK)*NB
228-
WORK( 1 ) = (LWKOPT+NT*NT)
229+
WORK( 1 ) = DROUNDUP_LWORK(LWKOPT+NT*NT)
229230

230231
ELSE
231232

232233
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
233234
LWKOPT = (LBWORK+LLWORK-NB)*NB
234-
WORK( 1 ) = LWKOPT
235+
WORK( 1 ) = DROUNDUP_LWORK(LWKOPT)
235236

236237
END IF
237238

@@ -413,7 +414,7 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
413414

414415
END IF
415416

416-
WORK( 1 ) = IWS
417+
WORK( 1 ) = DROUNDUP_LWORK(IWS)
417418
RETURN
418419
*
419420
* End of DGEQRF

SRC/VARIANTS/qr/LL/sgeqrf.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
EXTERNAL ILAENV
179+
DOUBLE PRECISION DROUNDUP_LWORK
180+
EXTERNAL ILAENV, DROUNDUP_LWORK
180181
* ..
181182
* .. Executable Statements ..
182183

@@ -225,13 +226,13 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
225226
* Optimal workspace for dlarfb = MAX(1,N)*NT
226227
*
227228
LWKOPT = (LBWORK+LLWORK)*NB
228-
WORK( 1 ) = (LWKOPT+NT*NT)
229+
WORK( 1 ) = DROUNDUP_LWORK(LWKOPT+NT*NT)
229230

230231
ELSE
231232

232233
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
233234
LWKOPT = (LBWORK+LLWORK-NB)*NB
234-
WORK( 1 ) = LWKOPT
235+
WORK( 1 ) = DROUNDUP_LWORK(LWKOPT)
235236

236237
END IF
237238

@@ -413,7 +414,7 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
413414

414415
END IF
415416

416-
WORK( 1 ) = IWS
417+
WORK( 1 ) = DROUNDUP_LWORK(IWS)
417418
RETURN
418419
*
419420
* End of SGEQRF

SRC/VARIANTS/qr/LL/zgeqrf.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
EXTERNAL ILAENV
179+
REAL SROUNDUP_LWORK
180+
EXTERNAL ILAENV, SROUNDUP_LWORK
180181
* ..
181182
* .. Executable Statements ..
182183

@@ -225,13 +226,13 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
225226
* Optimal workspace for dlarfb = MAX(1,N)*NT
226227
*
227228
LWKOPT = (LBWORK+LLWORK)*NB
228-
WORK( 1 ) = (LWKOPT+NT*NT)
229+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT+NT*NT)
229230

230231
ELSE
231232

232233
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
233234
LWKOPT = (LBWORK+LLWORK-NB)*NB
234-
WORK( 1 ) = LWKOPT
235+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
235236

236237
END IF
237238

@@ -413,7 +414,7 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
413414

414415
END IF
415416

416-
WORK( 1 ) = IWS
417+
WORK( 1 ) = SROUNDUP_LWORK(IWS)
417418
RETURN
418419
*
419420
* End of ZGEQRF

SRC/cgees.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
235235
* .. External Functions ..
236236
LOGICAL LSAME
237237
INTEGER ILAENV
238-
REAL CLANGE, SLAMCH
239-
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH
238+
REAL CLANGE, SLAMCH, SROUNDUP_LWORK
239+
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
240240
* ..
241241
* .. Intrinsic Functions ..
242242
INTRINSIC MAX, SQRT
@@ -292,7 +292,7 @@ SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
292292
MAXWRK = MAX( MAXWRK, HSWORK )
293293
END IF
294294
END IF
295-
WORK( 1 ) = MAXWRK
295+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
296296
*
297297
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
298298
INFO = -12
@@ -412,7 +412,7 @@ SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
412412
CALL CCOPY( N, A, LDA+1, W, 1 )
413413
END IF
414414
*
415-
WORK( 1 ) = MAXWRK
415+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
416416
RETURN
417417
*
418418
* End of CGEES

SRC/cgeesx.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,8 @@ SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
279279
* .. External Functions ..
280280
LOGICAL LSAME
281281
INTEGER ILAENV
282-
REAL CLANGE, SLAMCH
283-
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH
282+
REAL CLANGE, SLAMCH, SROUNDUP_LWORK
283+
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
284284
* ..
285285
* .. Intrinsic Functions ..
286286
INTRINSIC MAX, SQRT
@@ -350,7 +350,7 @@ SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
350350
IF( .NOT.WANTSN )
351351
$ LWRK = MAX( LWRK, ( N*N )/2 )
352352
END IF
353-
WORK( 1 ) = LWRK
353+
WORK( 1 ) = SROUNDUP_LWORK(LWRK)
354354
*
355355
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
356356
INFO = -15
@@ -487,7 +487,7 @@ SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
487487
END IF
488488
END IF
489489
*
490-
WORK( 1 ) = MAXWRK
490+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
491491
RETURN
492492
*
493493
* End of CGEESX

SRC/cgeev.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,9 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
218218
* .. External Functions ..
219219
LOGICAL LSAME
220220
INTEGER ISAMAX, ILAENV
221-
REAL SLAMCH, SCNRM2, CLANGE
222-
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE
221+
REAL SLAMCH, SCNRM2, CLANGE, SROUNDUP_LWORK
222+
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE,
223+
$ SROUNDUP_LWORK
223224
* ..
224225
* .. Intrinsic Functions ..
225226
INTRINSIC REAL, CMPLX, CONJG, AIMAG, MAX, SQRT
@@ -291,7 +292,7 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
291292
HSWORK = INT( WORK(1) )
292293
MAXWRK = MAX( MAXWRK, HSWORK, MINWRK )
293294
END IF
294-
WORK( 1 ) = MAXWRK
295+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
295296
*
296297
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
297298
INFO = -12
@@ -492,7 +493,7 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
492493
END IF
493494
END IF
494495
*
495-
WORK( 1 ) = MAXWRK
496+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
496497
RETURN
497498
*
498499
* End of CGEEV

SRC/cgeevx.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,9 @@ SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
330330
* .. External Functions ..
331331
LOGICAL LSAME
332332
INTEGER ISAMAX, ILAENV
333-
REAL SLAMCH, SCNRM2, CLANGE
334-
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE
333+
REAL SLAMCH, SCNRM2, CLANGE, SROUNDUP_LWORK
334+
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE,
335+
$ SROUNDUP_LWORK
335336
* ..
336337
* .. Intrinsic Functions ..
337338
INTRINSIC REAL, CMPLX, CONJG, AIMAG, MAX, SQRT
@@ -434,7 +435,7 @@ SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
434435
END IF
435436
MAXWRK = MAX( MAXWRK, MINWRK )
436437
END IF
437-
WORK( 1 ) = MAXWRK
438+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
438439
*
439440
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
440441
INFO = -20
@@ -656,7 +657,7 @@ SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
656657
END IF
657658
END IF
658659
*
659-
WORK( 1 ) = MAXWRK
660+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
660661
RETURN
661662
*
662663
* End of CGEEVX

SRC/cgehrd.f

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
201201
* ..
202202
* .. External Functions ..
203203
INTEGER ILAENV
204-
EXTERNAL ILAENV
204+
REAL SROUNDUP_LWORK
205+
EXTERNAL ILAENV, SROUNDUP_LWORK
205206
* ..
206207
* .. Executable Statements ..
207208
*
@@ -227,7 +228,7 @@ SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
227228
*
228229
NB = MIN( NBMAX, ILAENV( 1, 'CGEHRD', ' ', N, ILO, IHI, -1 ) )
229230
LWKOPT = N*NB + TSIZE
230-
WORK( 1 ) = LWKOPT
231+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
231232
END IF
232233
*
233234
IF( INFO.NE.0 ) THEN
@@ -344,7 +345,7 @@ SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
344345
* Use unblocked code to reduce the rest of the matrix
345346
*
346347
CALL CGEHD2( N, I, IHI, A, LDA, TAU, WORK, IINFO )
347-
WORK( 1 ) = LWKOPT
348+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
348349
*
349350
RETURN
350351
*

SRC/cgelq.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ SUBROUTINE CGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK,
192192
* ..
193193
* .. External Functions ..
194194
LOGICAL LSAME
195-
EXTERNAL LSAME
195+
REAL SROUNDUP_LWORK
196+
EXTERNAL LSAME, SROUNDUP_LWORK
196197
* ..
197198
* .. External Subroutines ..
198199
EXTERNAL CGELQT, CLASWLQ, XERBLA
@@ -294,9 +295,9 @@ SUBROUTINE CGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK,
294295
T( 2 ) = MB
295296
T( 3 ) = NB
296297
IF( MINW ) THEN
297-
WORK( 1 ) = LWMIN
298+
WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
298299
ELSE
299-
WORK( 1 ) = LWREQ
300+
WORK( 1 ) = SROUNDUP_LWORK(LWREQ)
300301
END IF
301302
END IF
302303
IF( INFO.NE.0 ) THEN
@@ -321,7 +322,7 @@ SUBROUTINE CGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK,
321322
$ LWORK, INFO )
322323
END IF
323324
*
324-
WORK( 1 ) = LWREQ
325+
WORK( 1 ) = SROUNDUP_LWORK(LWREQ)
325326
*
326327
RETURN
327328
*

SRC/cgelqf.f

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ SUBROUTINE CGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
167167
* ..
168168
* .. External Functions ..
169169
INTEGER ILAENV
170-
EXTERNAL ILAENV
170+
REAL SROUNDUP_LWORK
171+
EXTERNAL ILAENV, SROUNDUP_LWORK
171172
* ..
172173
* .. Executable Statements ..
173174
*
@@ -176,7 +177,7 @@ SUBROUTINE CGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
176177
INFO = 0
177178
NB = ILAENV( 1, 'CGELQF', ' ', M, N, -1, -1 )
178179
LWKOPT = M*NB
179-
WORK( 1 ) = LWKOPT
180+
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
180181
LQUERY = ( LWORK.EQ.-1 )
181182
IF( M.LT.0 ) THEN
182183
INFO = -1
@@ -266,7 +267,7 @@ SUBROUTINE CGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
266267
$ CALL CGELQ2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK,
267268
$ IINFO )
268269
*
269-
WORK( 1 ) = IWS
270+
WORK( 1 ) = SROUNDUP_LWORK(IWS)
270271
RETURN
271272
*
272273
* End of CGELQF

SRC/cgelsd.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ SUBROUTINE CGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
254254
* ..
255255
* .. External Functions ..
256256
INTEGER ILAENV
257-
REAL CLANGE, SLAMCH
258-
EXTERNAL CLANGE, SLAMCH, ILAENV
257+
REAL CLANGE, SLAMCH, SROUNDUP_LWORK
258+
EXTERNAL CLANGE, SLAMCH, ILAENV, SROUNDUP_LWORK
259259
* ..
260260
* .. Intrinsic Functions ..
261261
INTRINSIC INT, LOG, MAX, MIN, REAL
@@ -367,7 +367,7 @@ SUBROUTINE CGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
367367
END IF
368368
END IF
369369
MINWRK = MIN( MINWRK, MAXWRK )
370-
WORK( 1 ) = MAXWRK
370+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
371371
IWORK( 1 ) = LIWORK
372372
RWORK( 1 ) = LRWORK
373373
*
@@ -646,7 +646,7 @@ SUBROUTINE CGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,
646646
END IF
647647
*
648648
10 CONTINUE
649-
WORK( 1 ) = MAXWRK
649+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
650650
IWORK( 1 ) = LIWORK
651651
RWORK( 1 ) = LRWORK
652652
RETURN

0 commit comments

Comments
 (0)