Skip to content

Commit

Permalink
code fixed and unified: NW lower bound limited
Browse files Browse the repository at this point in the history
- to avoide possible divide by zero (LDWORK) in xxxMLQ, xxxMQR, xxxMRZ
- to unify code with ZUNMRZ, xxxMQL, xxxMRQ
  • Loading branch information
jip authored and weslleyspereira committed Apr 6, 2021
1 parent aa2ae6b commit e94cb0f
Show file tree
Hide file tree
Showing 23 changed files with 85 additions and 91 deletions.
13 changes: 5 additions & 8 deletions SRC/cunmbr.f
Original file line number Diff line number Diff line change
Expand Up @@ -240,13 +240,10 @@ SUBROUTINE CUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
END IF
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
NW = 0
NW = MAX( 1, M )
END IF
IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN
INFO = -1
Expand All @@ -266,12 +263,12 @@ SUBROUTINE CUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
IF( INFO.EQ.0 ) THEN
IF( NW.GT.0 ) THEN
IF( M.GT.0 .AND. N.GT.0 ) THEN
IF( APPLYQ ) THEN
IF( LEFT ) THEN
NB = ILAENV( 1, 'CUNMQR', SIDE // TRANS, M-1, N, M-1,
Expand All @@ -289,7 +286,7 @@ SUBROUTINE CUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
$ -1 )
END IF
END IF
LWKOPT = MAX( 1, NW*NB )
LWKOPT = NW*NB
ELSE
LWKOPT = 1
END IF
Expand Down
8 changes: 4 additions & 4 deletions SRC/cunmhr.f
Original file line number Diff line number Diff line change
Expand Up @@ -220,10 +220,10 @@ SUBROUTINE CUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -242,7 +242,7 @@ SUBROUTINE CUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand All @@ -252,7 +252,7 @@ SUBROUTINE CUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
ELSE
NB = ILAENV( 1, 'CUNMQR', SIDE // TRANS, M, NH, NH, -1 )
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/cunmlq.f
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,10 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -235,7 +235,7 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
INFO = -7
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -10
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -12
END IF
*
Expand All @@ -248,7 +248,7 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
ELSE
NB = MIN( NBMAX, ILAENV( 1, 'CUNMLQ', SIDE // TRANS, M, N,
$ K, -1 ) )
LWKOPT = MAX( 1, NW )*NB + TSIZE
LWKOPT = NW*NB + TSIZE
END IF
WORK( 1 ) = LWKOPT
END IF
Expand Down
8 changes: 4 additions & 4 deletions SRC/cunmqr.f
Original file line number Diff line number Diff line change
Expand Up @@ -215,10 +215,10 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -234,7 +234,7 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
INFO = -7
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -10
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -12
END IF
*
Expand All @@ -244,7 +244,7 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
NB = MIN( NBMAX, ILAENV( 1, 'CUNMQR', SIDE // TRANS, M, N, K,
$ -1 ) )
LWKOPT = MAX( 1, NW )*NB + TSIZE
LWKOPT = NW*NB + TSIZE
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
2 changes: 1 addition & 1 deletion SRC/cunmrz.f
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ SUBROUTINE CUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/cunmtr.f
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,10 @@ SUBROUTINE CUNMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -233,7 +233,7 @@ SUBROUTINE CUNMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
INFO = -7
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -10
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -12
END IF
*
Expand All @@ -255,7 +255,7 @@ SUBROUTINE CUNMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
$ -1 )
END IF
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/dormbr.f
Original file line number Diff line number Diff line change
Expand Up @@ -237,10 +237,10 @@ SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN
INFO = -1
Expand All @@ -260,7 +260,7 @@ SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand All @@ -282,7 +282,7 @@ SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
$ -1 )
END IF
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/dormhr.f
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,10 @@ SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -240,7 +240,7 @@ SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand All @@ -250,7 +250,7 @@ SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
ELSE
NB = ILAENV( 1, 'DORMQR', SIDE // TRANS, M, NH, NH, -1 )
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/dormlq.f
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,10 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -233,7 +233,7 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
INFO = -7
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -10
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -12
END IF
*
Expand All @@ -243,7 +243,7 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
NB = MIN( NBMAX, ILAENV( 1, 'DORMLQ', SIDE // TRANS, M, N, K,
$ -1 ) )
LWKOPT = MAX( 1, NW )*NB + TSIZE
LWKOPT = NW*NB + TSIZE
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/dormqr.f
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,10 @@ SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -232,7 +232,7 @@ SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
INFO = -7
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -10
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -12
END IF
*
Expand All @@ -242,7 +242,7 @@ SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
*
NB = MIN( NBMAX, ILAENV( 1, 'DORMQR', SIDE // TRANS, M, N, K,
$ -1 ) )
LWKOPT = MAX( 1, NW )*NB + TSIZE
LWKOPT = NW*NB + TSIZE
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
2 changes: 1 addition & 1 deletion SRC/dormrz.f
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/dormtr.f
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,10 @@ SUBROUTINE DORMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -231,7 +231,7 @@ SUBROUTINE DORMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
INFO = -7
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -10
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -12
END IF
*
Expand All @@ -253,7 +253,7 @@ SUBROUTINE DORMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
$ -1 )
END IF
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/sormbr.f
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,10 @@ SUBROUTINE SORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN
INFO = -1
Expand All @@ -262,7 +262,7 @@ SUBROUTINE SORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand All @@ -284,7 +284,7 @@ SUBROUTINE SORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
$ -1 )
END IF
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
8 changes: 4 additions & 4 deletions SRC/sormhr.f
Original file line number Diff line number Diff line change
Expand Up @@ -220,10 +220,10 @@ SUBROUTINE SORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
*
IF( LEFT ) THEN
NQ = M
NW = N
NW = MAX( 1, N )
ELSE
NQ = N
NW = M
NW = MAX( 1, M )
END IF
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
INFO = -1
Expand All @@ -242,7 +242,7 @@ SUBROUTINE SORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
INFO = -8
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
INFO = -11
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
INFO = -13
END IF
*
Expand All @@ -252,7 +252,7 @@ SUBROUTINE SORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
ELSE
NB = ILAENV( 1, 'SORMQR', SIDE // TRANS, M, NH, NH, -1 )
END IF
LWKOPT = MAX( 1, NW )*NB
LWKOPT = NW*NB
WORK( 1 ) = LWKOPT
END IF
*
Expand Down
Loading

0 comments on commit e94cb0f

Please sign in to comment.