Skip to content

Commit 33accab

Browse files
committed
code fixed and unified: NW lower bound limited
- to avoide possible divide by zero (LDWORK) in xxxMLQ, xxxMQR, xxxMRZ - to unify code with ZUNMRZ, xxxMQL, xxxMRQ
1 parent f6a3b18 commit 33accab

23 files changed

+85
-91
lines changed

SRC/cunmbr.f

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,10 @@ SUBROUTINE CUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
243243
*
244244
IF( LEFT ) THEN
245245
NQ = M
246-
NW = N
246+
NW = MAX( 1, N )
247247
ELSE
248248
NQ = N
249-
NW = M
250-
END IF
251-
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
252-
NW = 0
249+
NW = MAX( 1, M )
253250
END IF
254251
IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN
255252
INFO = -1
@@ -269,12 +266,12 @@ SUBROUTINE CUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
269266
INFO = -8
270267
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
271268
INFO = -11
272-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
269+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
273270
INFO = -13
274271
END IF
275272
*
276273
IF( INFO.EQ.0 ) THEN
277-
IF( NW.GT.0 ) THEN
274+
IF( M.GT.0 .AND. N.GT.0 ) THEN
278275
IF( APPLYQ ) THEN
279276
IF( LEFT ) THEN
280277
NB = ILAENV( 1, 'CUNMQR', SIDE // TRANS, M-1, N, M-1,
@@ -292,7 +289,7 @@ SUBROUTINE CUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
292289
$ -1 )
293290
END IF
294291
END IF
295-
LWKOPT = MAX( 1, NW*NB )
292+
LWKOPT = NW*NB
296293
ELSE
297294
LWKOPT = 1
298295
END IF

SRC/cunmhr.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,10 @@ SUBROUTINE CUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
223223
*
224224
IF( LEFT ) THEN
225225
NQ = M
226-
NW = N
226+
NW = MAX( 1, N )
227227
ELSE
228228
NQ = N
229-
NW = M
229+
NW = MAX( 1, M )
230230
END IF
231231
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
232232
INFO = -1
@@ -245,7 +245,7 @@ SUBROUTINE CUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
245245
INFO = -8
246246
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
247247
INFO = -11
248-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
248+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
249249
INFO = -13
250250
END IF
251251
*
@@ -255,7 +255,7 @@ SUBROUTINE CUNMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
255255
ELSE
256256
NB = ILAENV( 1, 'CUNMQR', SIDE // TRANS, M, NH, NH, -1 )
257257
END IF
258-
LWKOPT = MAX( 1, NW )*NB
258+
LWKOPT = NW*NB
259259
WORK( 1 ) = LWKOPT
260260
END IF
261261
*

SRC/cunmlq.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,10 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
219219
*
220220
IF( LEFT ) THEN
221221
NQ = M
222-
NW = N
222+
NW = MAX( 1, N )
223223
ELSE
224224
NQ = N
225-
NW = M
225+
NW = MAX( 1, M )
226226
END IF
227227
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
228228
INFO = -1
@@ -238,7 +238,7 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
238238
INFO = -7
239239
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
240240
INFO = -10
241-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
241+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
242242
INFO = -12
243243
END IF
244244
*
@@ -251,7 +251,7 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
251251
ELSE
252252
NB = MIN( NBMAX, ILAENV( 1, 'CUNMLQ', SIDE // TRANS, M, N,
253253
$ K, -1 ) )
254-
LWKOPT = MAX( 1, NW )*NB + TSIZE
254+
LWKOPT = NW*NB + TSIZE
255255
END IF
256256
WORK( 1 ) = LWKOPT
257257
END IF

SRC/cunmqr.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,10 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
218218
*
219219
IF( LEFT ) THEN
220220
NQ = M
221-
NW = N
221+
NW = MAX( 1, N )
222222
ELSE
223223
NQ = N
224-
NW = M
224+
NW = MAX( 1, M )
225225
END IF
226226
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
227227
INFO = -1
@@ -237,7 +237,7 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
237237
INFO = -7
238238
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
239239
INFO = -10
240-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
240+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
241241
INFO = -12
242242
END IF
243243
*
@@ -247,7 +247,7 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
247247
*
248248
NB = MIN( NBMAX, ILAENV( 1, 'CUNMQR', SIDE // TRANS, M, N, K,
249249
$ -1 ) )
250-
LWKOPT = MAX( 1, NW )*NB + TSIZE
250+
LWKOPT = NW*NB + TSIZE
251251
WORK( 1 ) = LWKOPT
252252
END IF
253253
*

SRC/cunmrz.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ SUBROUTINE CUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
259259
INFO = -8
260260
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
261261
INFO = -11
262-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
262+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
263263
INFO = -13
264264
END IF
265265
*

SRC/cunmtr.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,10 @@ SUBROUTINE CUNMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
216216
*
217217
IF( LEFT ) THEN
218218
NQ = M
219-
NW = N
219+
NW = MAX( 1, N )
220220
ELSE
221221
NQ = N
222-
NW = M
222+
NW = MAX( 1, M )
223223
END IF
224224
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
225225
INFO = -1
@@ -236,7 +236,7 @@ SUBROUTINE CUNMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
236236
INFO = -7
237237
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
238238
INFO = -10
239-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
239+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
240240
INFO = -12
241241
END IF
242242
*
@@ -258,7 +258,7 @@ SUBROUTINE CUNMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC,
258258
$ -1 )
259259
END IF
260260
END IF
261-
LWKOPT = MAX( 1, NW )*NB
261+
LWKOPT = NW*NB
262262
WORK( 1 ) = LWKOPT
263263
END IF
264264
*

SRC/dormbr.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,10 @@ SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
240240
*
241241
IF( LEFT ) THEN
242242
NQ = M
243-
NW = N
243+
NW = MAX( 1, N )
244244
ELSE
245245
NQ = N
246-
NW = M
246+
NW = MAX( 1, M )
247247
END IF
248248
IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN
249249
INFO = -1
@@ -263,7 +263,7 @@ SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
263263
INFO = -8
264264
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
265265
INFO = -11
266-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
266+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
267267
INFO = -13
268268
END IF
269269
*
@@ -285,7 +285,7 @@ SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
285285
$ -1 )
286286
END IF
287287
END IF
288-
LWKOPT = MAX( 1, NW )*NB
288+
LWKOPT = NW*NB
289289
WORK( 1 ) = LWKOPT
290290
END IF
291291
*

SRC/dormhr.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,10 @@ SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
221221
*
222222
IF( LEFT ) THEN
223223
NQ = M
224-
NW = N
224+
NW = MAX( 1, N )
225225
ELSE
226226
NQ = N
227-
NW = M
227+
NW = MAX( 1, M )
228228
END IF
229229
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
230230
INFO = -1
@@ -243,7 +243,7 @@ SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
243243
INFO = -8
244244
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
245245
INFO = -11
246-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
246+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
247247
INFO = -13
248248
END IF
249249
*
@@ -253,7 +253,7 @@ SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C,
253253
ELSE
254254
NB = ILAENV( 1, 'DORMQR', SIDE // TRANS, M, NH, NH, -1 )
255255
END IF
256-
LWKOPT = MAX( 1, NW )*NB
256+
LWKOPT = NW*NB
257257
WORK( 1 ) = LWKOPT
258258
END IF
259259
*

SRC/dormlq.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,10 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
217217
*
218218
IF( LEFT ) THEN
219219
NQ = M
220-
NW = N
220+
NW = MAX( 1, N )
221221
ELSE
222222
NQ = N
223-
NW = M
223+
NW = MAX( 1, M )
224224
END IF
225225
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
226226
INFO = -1
@@ -236,7 +236,7 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
236236
INFO = -7
237237
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
238238
INFO = -10
239-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
239+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
240240
INFO = -12
241241
END IF
242242
*
@@ -246,7 +246,7 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
246246
*
247247
NB = MIN( NBMAX, ILAENV( 1, 'DORMLQ', SIDE // TRANS, M, N, K,
248248
$ -1 ) )
249-
LWKOPT = MAX( 1, NW )*NB + TSIZE
249+
LWKOPT = NW*NB + TSIZE
250250
WORK( 1 ) = LWKOPT
251251
END IF
252252
*

SRC/dormqr.f

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,10 @@ SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
216216
*
217217
IF( LEFT ) THEN
218218
NQ = M
219-
NW = N
219+
NW = MAX( 1, N )
220220
ELSE
221221
NQ = N
222-
NW = M
222+
NW = MAX( 1, M )
223223
END IF
224224
IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN
225225
INFO = -1
@@ -235,7 +235,7 @@ SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
235235
INFO = -7
236236
ELSE IF( LDC.LT.MAX( 1, M ) ) THEN
237237
INFO = -10
238-
ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN
238+
ELSE IF( LWORK.LT.NW .AND. .NOT.LQUERY ) THEN
239239
INFO = -12
240240
END IF
241241
*
@@ -245,7 +245,7 @@ SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
245245
*
246246
NB = MIN( NBMAX, ILAENV( 1, 'DORMQR', SIDE // TRANS, M, N, K,
247247
$ -1 ) )
248-
LWKOPT = MAX( 1, NW )*NB + TSIZE
248+
LWKOPT = NW*NB + TSIZE
249249
WORK( 1 ) = LWKOPT
250250
END IF
251251
*

0 commit comments

Comments
 (0)