Skip to content

Commit d58c88c

Browse files
authored
Merge pull request #4310 from martin-frbg/lapack904
Apply rounding up to workspace calculations done with reals (Reference-LAPACK PR 904)
2 parents feeb104 + 2ce67e2 commit d58c88c

File tree

216 files changed

+1334
-1187
lines changed

Some content is hidden

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

216 files changed

+1334
-1187
lines changed

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/SRC/cgees.f

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@
189189
*> \author Univ. of Colorado Denver
190190
*> \author NAG Ltd.
191191
*
192-
*> \ingroup complexGEeigen
192+
*> \ingroup gees
193193
*
194194
* =====================================================================
195195
SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
@@ -230,13 +230,13 @@ SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
230230
* ..
231231
* .. External Subroutines ..
232232
EXTERNAL CCOPY, CGEBAK, CGEBAL, CGEHRD, CHSEQR, CLACPY,
233-
$ CLASCL, CTRSEN, CUNGHR, SLABAD, XERBLA
233+
$ CLASCL, CTRSEN, CUNGHR, XERBLA
234234
* ..
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
@@ -318,7 +318,6 @@ SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
318318
EPS = SLAMCH( 'P' )
319319
SMLNUM = SLAMCH( 'S' )
320320
BIGNUM = ONE / SMLNUM
321-
CALL SLABAD( SMLNUM, BIGNUM )
322321
SMLNUM = SQRT( SMLNUM ) / EPS
323322
BIGNUM = ONE / SMLNUM
324323
*
@@ -413,7 +412,7 @@ SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
413412
CALL CCOPY( N, A, LDA+1, W, 1 )
414413
END IF
415414
*
416-
WORK( 1 ) = MAXWRK
415+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
417416
RETURN
418417
*
419418
* End of CGEES

lapack-netlib/SRC/cgeesx.f

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@
230230
*> \author Univ. of Colorado Denver
231231
*> \author NAG Ltd.
232232
*
233-
*> \ingroup complexGEeigen
233+
*> \ingroup geesx
234234
*
235235
* =====================================================================
236236
SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
@@ -274,13 +274,13 @@ SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
274274
* ..
275275
* .. External Subroutines ..
276276
EXTERNAL CCOPY, CGEBAK, CGEBAL, CGEHRD, CHSEQR, CLACPY,
277-
$ CLASCL, CTRSEN, CUNGHR, SLABAD, SLASCL, XERBLA
277+
$ CLASCL, CTRSEN, CUNGHR, SLASCL, XERBLA
278278
* ..
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
@@ -376,7 +376,6 @@ SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
376376
EPS = SLAMCH( 'P' )
377377
SMLNUM = SLAMCH( 'S' )
378378
BIGNUM = ONE / SMLNUM
379-
CALL SLABAD( SMLNUM, BIGNUM )
380379
SMLNUM = SQRT( SMLNUM ) / EPS
381380
BIGNUM = ONE / SMLNUM
382381
*
@@ -488,7 +487,7 @@ SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
488487
END IF
489488
END IF
490489
*
491-
WORK( 1 ) = MAXWRK
490+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
492491
RETURN
493492
*
494493
* End of CGEESX

lapack-netlib/SRC/cgeev.f

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@
172172
*
173173
* @generated from zgeev.f, fortran z -> c, Tue Apr 19 01:47:44 2016
174174
*
175-
*> \ingroup complexGEeigen
175+
*> \ingroup geev
176176
*
177177
* =====================================================================
178178
SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
@@ -212,14 +212,15 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
212212
REAL DUM( 1 )
213213
* ..
214214
* .. External Subroutines ..
215-
EXTERNAL SLABAD, XERBLA, CSSCAL, CGEBAK, CGEBAL, CGEHRD,
215+
EXTERNAL XERBLA, CSSCAL, CGEBAK, CGEBAL, CGEHRD,
216216
$ CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3, CUNGHR
217217
* ..
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
@@ -315,7 +316,6 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
315316
EPS = SLAMCH( 'P' )
316317
SMLNUM = SLAMCH( 'S' )
317318
BIGNUM = ONE / SMLNUM
318-
CALL SLABAD( SMLNUM, BIGNUM )
319319
SMLNUM = SQRT( SMLNUM ) / EPS
320320
BIGNUM = ONE / SMLNUM
321321
*
@@ -493,7 +493,7 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
493493
END IF
494494
END IF
495495
*
496-
WORK( 1 ) = MAXWRK
496+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
497497
RETURN
498498
*
499499
* End of CGEEV

lapack-netlib/SRC/cgeevx.f

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@
279279
*
280280
* @generated from zgeevx.f, fortran z -> c, Tue Apr 19 01:47:44 2016
281281
*
282-
*> \ingroup complexGEeigen
282+
*> \ingroup geevx
283283
*
284284
* =====================================================================
285285
SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
@@ -323,15 +323,16 @@ SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
323323
REAL DUM( 1 )
324324
* ..
325325
* .. External Subroutines ..
326-
EXTERNAL SLABAD, SLASCL, XERBLA, CSSCAL, CGEBAK, CGEBAL,
326+
EXTERNAL SLASCL, XERBLA, CSSCAL, CGEBAK, CGEBAL,
327327
$ CGEHRD, CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3,
328328
$ CTRSNA, CUNGHR
329329
* ..
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
@@ -458,7 +459,6 @@ SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
458459
EPS = SLAMCH( 'P' )
459460
SMLNUM = SLAMCH( 'S' )
460461
BIGNUM = ONE / SMLNUM
461-
CALL SLABAD( SMLNUM, BIGNUM )
462462
SMLNUM = SQRT( SMLNUM ) / EPS
463463
BIGNUM = ONE / SMLNUM
464464
*
@@ -657,7 +657,7 @@ SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
657657
END IF
658658
END IF
659659
*
660-
WORK( 1 ) = MAXWRK
660+
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
661661
RETURN
662662
*
663663
* End of CGEEVX

lapack-netlib/SRC/cgehrd.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
*> \author Univ. of Colorado Denver
121121
*> \author NAG Ltd.
122122
*
123-
*> \ingroup complexGEcomputational
123+
*> \ingroup gehrd
124124
*
125125
*> \par Further Details:
126126
* =====================
@@ -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
*

0 commit comments

Comments
 (0)