Skip to content

Commit 5c11b2f

Browse files
authored
Handle corner cases of LWORK (Reference-LAPACK PR 942)
1 parent 8ce44c1 commit 5c11b2f

File tree

8 files changed

+21
-23
lines changed

8 files changed

+21
-23
lines changed

lapack-netlib/TESTING/LIN/cchkhe_aa_2stage.f

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -433,9 +433,9 @@ SUBROUTINE CCHKHE_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
433433
* block factorization, LWORK is the length of AINV.
434434
*
435435
SRNAMT = 'CHETRF_AA_2STAGE'
436-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
437-
CALL CHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
438-
$ AINV, (3*NB+1)*N,
436+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX)
437+
CALL CHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
438+
$ AINV, MAX( 1, (3*NB+1)*N ),
439439
$ IWORK, IWORK( 1+N ),
440440
$ WORK, LWORK,
441441
$ INFO )
@@ -517,7 +517,6 @@ SUBROUTINE CCHKHE_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
517517
CALL CLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
518518
*
519519
SRNAMT = 'CHETRS_AA_2STAGE'
520-
LWORK = MAX( 1, 3*N-2 )
521520
CALL CHETRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
522521
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
523522
$ X, LDA, INFO )

lapack-netlib/TESTING/LIN/cdrvhe_aa_2stage.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,9 +400,9 @@ SUBROUTINE CDRVHE_AA_2STAGE(
400400
* Factor the matrix and solve the system using CHESV_AA.
401401
*
402402
SRNAMT = 'CHESV_AA_2STAGE '
403-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
403+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX)
404404
CALL CHESV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
405-
$ AINV, (3*NB+1)*N,
405+
$ AINV, MAX( 1, (3*NB+1)*N ),
406406
$ IWORK, IWORK( 1+N ),
407407
$ X, LDA, WORK, LWORK, INFO )
408408
*

lapack-netlib/TESTING/LIN/dchksy_aa_2stage.f

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,9 +421,9 @@ SUBROUTINE DCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
421421
* block factorization, LWORK is the length of AINV.
422422
*
423423
SRNAMT = 'DSYTRF_AA_2STAGE'
424-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
424+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
425425
CALL DSYTRF_AA_2STAGE( UPLO, N, AFAC, LDA,
426-
$ AINV, (3*NB+1)*N,
426+
$ AINV, MAX( 1, (3*NB+1)*N ),
427427
$ IWORK, IWORK( 1+N ),
428428
$ WORK, LWORK,
429429
$ INFO )
@@ -503,7 +503,6 @@ SUBROUTINE DCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
503503
CALL DLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
504504
*
505505
SRNAMT = 'DSYTRS_AA_2STAGE'
506-
LWORK = MAX( 1, 3*N-2 )
507506
CALL DSYTRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
508507
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
509508
$ X, LDA, INFO )

lapack-netlib/TESTING/LIN/ddrvsy_aa_2stage.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,9 +400,9 @@ SUBROUTINE DDRVSY_AA_2STAGE(
400400
* Factor the matrix and solve the system using DSYSV_AA.
401401
*
402402
SRNAMT = 'DSYSV_AA_2STAGE '
403-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
403+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
404404
CALL DSYSV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
405-
$ AINV, (3*NB+1)*N,
405+
$ AINV, MAX( 1, (3*NB+1)*N ),
406406
$ IWORK, IWORK( 1+N ),
407407
$ X, LDA, WORK, LWORK, INFO )
408408
*

lapack-netlib/TESTING/LIN/schksy_aa_2stage.f

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,9 @@ SUBROUTINE SCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
423423
* block factorization, LWORK is the length of AINV.
424424
*
425425
SRNAMT = 'SSYTRF_AA_2STAGE'
426-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
426+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
427427
CALL SSYTRF_AA_2STAGE( UPLO, N, AFAC, LDA,
428-
$ AINV, (3*NB+1)*N,
428+
$ AINV, MAX( 1, (3*NB+1)*N ),
429429
$ IWORK, IWORK( 1+N ),
430430
$ WORK, LWORK,
431431
$ INFO )
@@ -505,7 +505,6 @@ SUBROUTINE SCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
505505
CALL SLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
506506
*
507507
SRNAMT = 'SSYTRS_AA_2STAGE'
508-
LWORK = MAX( 1, 3*N-2 )
509508
CALL SSYTRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
510509
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
511510
$ X, LDA, INFO )

lapack-netlib/TESTING/LIN/sdrvsy_aa_2stage.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,9 +400,9 @@ SUBROUTINE SDRVSY_AA_2STAGE(
400400
* Factor the matrix and solve the system using SSYSV_AA.
401401
*
402402
SRNAMT = 'SSYSV_AA_2STAGE '
403-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
403+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
404404
CALL SSYSV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
405-
$ AINV, (3*NB+1)*N,
405+
$ AINV, MAX( 1, (3*NB+1)*N ),
406406
$ IWORK, IWORK( 1+N ),
407407
$ X, LDA, WORK, LWORK, INFO )
408408
*

lapack-netlib/TESTING/LIN/zchkhe_aa_2stage.f

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Definition:
99
* ===========
1010
*
11-
* SUBROUTINE ZCHKHE_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL,
11+
* SUBROUTINE ZCHKHE_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL,
1212
* NNS, NSVAL, THRESH, TSTERR, NMAX, A,
1313
* AFAC, AINV, B, X, XACT, WORK, RWORK,
1414
* IWORK, NOUT )
@@ -185,7 +185,8 @@ SUBROUTINE ZCHKHE_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
185185
LOGICAL DOTYPE( * )
186186
INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
187187
COMPLEX*16 A( * ), AFAC( * ), AINV( * ), B( * ),
188-
$ RWORK( * ), WORK( * ), X( * ), XACT( * )
188+
$ WORK( * ), X( * ), XACT( * )
189+
DOUBLE PRECISION RWORK( * )
189190
* ..
190191
*
191192
* =====================================================================
@@ -430,9 +431,9 @@ SUBROUTINE ZCHKHE_AA_2STAGE( DOTYPE, NN, NVAL, NNB, NBVAL, NNS,
430431
* block factorization, LWORK is the length of AINV.
431432
*
432433
SRNAMT = 'ZHETRF_AA_2STAGE'
433-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
434-
CALL ZHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
435-
$ AINV, (3*NB+1)*N,
434+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
435+
CALL ZHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
436+
$ AINV, MAX( 1, (3*NB+1)*N ),
436437
$ IWORK, IWORK( 1+N ),
437438
$ WORK, LWORK,
438439
$ INFO )

lapack-netlib/TESTING/LIN/zdrvhe_aa_2stage.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,9 +400,9 @@ SUBROUTINE ZDRVHE_AA_2STAGE(
400400
* Factor the matrix and solve the system using ZHESV_AA.
401401
*
402402
SRNAMT = 'ZHESV_AA_2STAGE '
403-
LWORK = MIN(N*NB, 3*NMAX*NMAX)
403+
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
404404
CALL ZHESV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
405-
$ AINV, (3*NB+1)*N,
405+
$ AINV, MAX( 1, (3*NB+1)*N ),
406406
$ IWORK, IWORK( 1+N ),
407407
$ X, LDA, WORK, LWORK, INFO )
408408
*

0 commit comments

Comments
 (0)