Skip to content

Commit 036ec87

Browse files
committed
code fixed: a check was added in xGBT02 to handle NaN while norm computing
A check was borrowed from xLANGB.
1 parent 6b0dafd commit 036ec87

File tree

4 files changed

+36
-24
lines changed

4 files changed

+36
-24
lines changed

TESTING/LIN/cgbt02.f

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,13 @@ SUBROUTINE CGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
170170
* ..
171171
* .. Local Scalars ..
172172
INTEGER I1, I2, J, KD, N1
173-
REAL ANORM, BNORM, EPS, XNORM
173+
REAL ANORM, BNORM, EPS, TEMP, XNORM
174174
COMPLEX CDUM
175175
* ..
176176
* .. External Functions ..
177-
LOGICAL LSAME
177+
LOGICAL LSAME, SISNAN
178178
REAL SCASUM, SLAMCH
179-
EXTERNAL LSAME, SCASUM, SLAMCH
179+
EXTERNAL LSAME, SCASUM, SISNAN, SLAMCH
180180
* ..
181181
* .. External Subroutines ..
182182
EXTERNAL CGBMV
@@ -211,8 +211,10 @@ SUBROUTINE CGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
211211
DO 10 J = 1, N
212212
I1 = MAX( KD+1-J, 1 )
213213
I2 = MIN( KD+M-J, KL+KD )
214-
IF( I2.GE.I1 )
215-
$ ANORM = MAX( ANORM, SCASUM( I2-I1+1, A( I1, J ), 1 ) )
214+
IF( I2.GE.I1 ) THEN
215+
TEMP = SCASUM( I2-I1+1, A( I1, J ), 1 )
216+
IF( ANORM.LT.TEMP .OR. SISNAN( TEMP ) ) ANORM = TEMP
217+
END IF
216218
10 CONTINUE
217219
ELSE
218220
*
@@ -228,7 +230,8 @@ SUBROUTINE CGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
228230
14 CONTINUE
229231
16 CONTINUE
230232
DO 18 I1 = 1, M
231-
ANORM = MAX( ANORM, RWORK( I1 ) )
233+
TEMP = RWORK( I1 )
234+
IF( ANORM.LT.TEMP .OR. SISNAN( TEMP ) ) ANORM = TEMP
232235
18 CONTINUE
233236
END IF
234237
IF( ANORM.LE.ZERO ) THEN

TESTING/LIN/dgbt02.f

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ SUBROUTINE DGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
168168
* ..
169169
* .. Local Scalars ..
170170
INTEGER I1, I2, J, KD, N1
171-
DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
171+
DOUBLE PRECISION ANORM, BNORM, EPS, TEMP, XNORM
172172
* ..
173173
* .. External Functions ..
174-
LOGICAL LSAME
174+
LOGICAL DISNAN, LSAME
175175
DOUBLE PRECISION DASUM, DLAMCH
176-
EXTERNAL LSAME, DASUM, DLAMCH
176+
EXTERNAL DASUM, DISNAN, DLAMCH, LSAME
177177
* ..
178178
* .. External Subroutines ..
179179
EXTERNAL DGBMV
@@ -202,8 +202,10 @@ SUBROUTINE DGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
202202
DO 10 J = 1, N
203203
I1 = MAX( KD+1-J, 1 )
204204
I2 = MIN( KD+M-J, KL+KD )
205-
IF( I2.GE.I1 )
206-
$ ANORM = MAX( ANORM, DASUM( I2-I1+1, A( I1, J ), 1 ) )
205+
IF( I2.GE.I1 ) THEN
206+
TEMP = DASUM( I2-I1+1, A( I1, J ), 1 )
207+
IF( ANORM.LT.TEMP .OR. DISNAN( TEMP ) ) ANORM = TEMP
208+
END IF
207209
10 CONTINUE
208210
ELSE
209211
*
@@ -219,7 +221,8 @@ SUBROUTINE DGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
219221
14 CONTINUE
220222
16 CONTINUE
221223
DO 18 I1 = 1, M
222-
ANORM = MAX( ANORM, RWORK( I1 ) )
224+
TEMP = RWORK( I1 )
225+
IF( ANORM.LT.TEMP .OR. DISNAN( TEMP ) ) ANORM = TEMP
223226
18 CONTINUE
224227
END IF
225228
IF( ANORM.LE.ZERO ) THEN

TESTING/LIN/sgbt02.f

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ SUBROUTINE SGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
168168
* ..
169169
* .. Local Scalars ..
170170
INTEGER I1, I2, J, KD, N1
171-
REAL ANORM, BNORM, EPS, XNORM
171+
REAL ANORM, BNORM, EPS, TEMP, XNORM
172172
* ..
173173
* .. External Functions ..
174-
LOGICAL LSAME
174+
LOGICAL LSAME, SISNAN
175175
REAL SASUM, SLAMCH
176-
EXTERNAL LSAME, SASUM, SLAMCH
176+
EXTERNAL LSAME, SASUM, SISNAN, SLAMCH
177177
* ..
178178
* .. External Subroutines ..
179179
EXTERNAL SGBMV
@@ -202,8 +202,10 @@ SUBROUTINE SGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
202202
DO 10 J = 1, N
203203
I1 = MAX( KD+1-J, 1 )
204204
I2 = MIN( KD+M-J, KL+KD )
205-
IF( I2.GE.I1 )
206-
$ ANORM = MAX( ANORM, SASUM( I2-I1+1, A( I1, J ), 1 ) )
205+
IF( I2.GE.I1 ) THEN
206+
TEMP = SASUM( I2-I1+1, A( I1, J ), 1 )
207+
IF( ANORM.LT.TEMP .OR. SISNAN( TEMP ) ) ANORM = TEMP
208+
END IF
207209
10 CONTINUE
208210
ELSE
209211
*
@@ -219,7 +221,8 @@ SUBROUTINE SGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
219221
14 CONTINUE
220222
16 CONTINUE
221223
DO 18 I1 = 1, M
222-
ANORM = MAX( ANORM, RWORK( I1 ) )
224+
TEMP = RWORK( I1 )
225+
IF( ANORM.LT.TEMP .OR. SISNAN( TEMP ) ) ANORM = TEMP
223226
18 CONTINUE
224227
END IF
225228
IF( ANORM.LE.ZERO ) THEN

TESTING/LIN/zgbt02.f

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,13 @@ SUBROUTINE ZGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
170170
* ..
171171
* .. Local Scalars ..
172172
INTEGER I1, I2, J, KD, N1
173-
DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
173+
DOUBLE PRECISION ANORM, BNORM, EPS, TEMP, XNORM
174174
COMPLEX*16 ZDUM
175175
* ..
176176
* .. External Functions ..
177-
LOGICAL LSAME
177+
LOGICAL DISNAN, LSAME
178178
DOUBLE PRECISION DLAMCH, DZASUM
179-
EXTERNAL LSAME, DLAMCH, DZASUM
179+
EXTERNAL DISNAN, DLAMCH, DZASUM, LSAME
180180
* ..
181181
* .. External Subroutines ..
182182
EXTERNAL ZGBMV
@@ -211,8 +211,10 @@ SUBROUTINE ZGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
211211
DO 10 J = 1, N
212212
I1 = MAX( KD+1-J, 1 )
213213
I2 = MIN( KD+M-J, KL+KD )
214-
IF( I2.GE.I1 )
215-
$ ANORM = MAX( ANORM, DZASUM( I2-I1+1, A( I1, J ), 1 ) )
214+
IF( I2.GE.I1 ) THEN
215+
TEMP = DZASUM( I2-I1+1, A( I1, J ), 1 )
216+
IF( ANORM.LT.TEMP .OR. DISNAN( TEMP ) ) ANORM = TEMP
217+
END IF
216218
10 CONTINUE
217219
ELSE
218220
*
@@ -228,7 +230,8 @@ SUBROUTINE ZGBT02( TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B,
228230
14 CONTINUE
229231
16 CONTINUE
230232
DO 18 I1 = 1, M
231-
ANORM = MAX( ANORM, RWORK( I1 ) )
233+
TEMP = RWORK( I1 )
234+
IF( ANORM.LT.TEMP .OR. DISNAN( TEMP ) ) ANORM = TEMP
232235
18 CONTINUE
233236
END IF
234237
IF( ANORM.LE.ZERO ) THEN

0 commit comments

Comments
 (0)