Skip to content

Commit 9261f0f

Browse files
committed
Fix potential distrub of diagonal elements
1 parent ff8bcde commit 9261f0f

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

SRC/dkyev.f

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ SUBROUTINE DKYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
171171
* .. Local Scalars ..
172172
LOGICAL LOWER, LQUERY, WANTZ
173173
INTEGER IINFO, IMAX, INDTAU, INDWRK, ISCALE,
174-
$ LLWORK, LWKOPT, NB
174+
$ LLWORK, LWKOPT, NB, J
175175
DOUBLE PRECISION ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
176176
$ SMLNUM
177177
* ..
@@ -182,7 +182,7 @@ SUBROUTINE DKYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
182182
EXTERNAL ILAENV, LSAME, DLAMCH, DLANKY
183183
* ..
184184
* .. External Subroutines ..
185-
EXTERNAL DLASCL, DORGTR, DSCAL, DKTEQR, DKYTRD,
185+
EXTERNAL DORGTR, DSCAL, DKTEQR, DKYTRD,
186186
$ XERBLA
187187
* ..
188188
* .. Intrinsic Functions ..
@@ -257,8 +257,17 @@ SUBROUTINE DKYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
257257
ISCALE = 1
258258
SIGMA = RMAX / ANRM
259259
END IF
260-
IF( ISCALE.EQ.1 )
261-
$ CALL DLASCL( UPLO, 0, 0, ONE, SIGMA, N, N, A, LDA, INFO )
260+
IF( ISCALE.EQ.1 ) THEN
261+
IF( LOWER ) THEN
262+
DO 10 J = 1, N-1
263+
CALL DSCAL( N-J, SIGMA, A( J+1, J ), 1 )
264+
10 CONTINUE
265+
ELSE
266+
DO 20 J = 2, N
267+
CALL DSCAL( J-1, SIGMA, A( 1, J ), 1 )
268+
20 CONTINUE
269+
END IF
270+
END IF
262271
*
263272
* Call DKYTRD to reduce skew-symmetric matrix to tridiagonal form.
264273
*

SRC/skyev.f

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ SUBROUTINE SKYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
171171
* .. Local Scalars ..
172172
LOGICAL LOWER, LQUERY, WANTZ
173173
INTEGER IINFO, IMAX, INDTAU, INDWRK, ISCALE,
174-
$ LLWORK, LWKOPT, NB
174+
$ LLWORK, LWKOPT, NB, J
175175
REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
176176
$ SMLNUM
177177
* ..
@@ -183,7 +183,7 @@ SUBROUTINE SKYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
183183
$ SROUNDUP_LWORK
184184
* ..
185185
* .. External Subroutines ..
186-
EXTERNAL SLASCL, SORGTR, SSCAL, SKTEQR, SKYTRD,
186+
EXTERNAL SORGTR, SSCAL, SKTEQR, SKYTRD,
187187
$ XERBLA
188188
* ..
189189
* .. Intrinsic Functions ..
@@ -258,8 +258,17 @@ SUBROUTINE SKYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
258258
ISCALE = 1
259259
SIGMA = RMAX / ANRM
260260
END IF
261-
IF( ISCALE.EQ.1 )
262-
$ CALL SLASCL( UPLO, 0, 0, ONE, SIGMA, N, N, A, LDA, INFO )
261+
IF( ISCALE.EQ.1 ) THEN
262+
IF( LOWER ) THEN
263+
DO 10 J = 1, N-1
264+
CALL SSCAL( N-J, SIGMA, A( J+1, J ), 1 )
265+
10 CONTINUE
266+
ELSE
267+
DO 20 J = 2, N
268+
CALL SSCAL( J-1, SIGMA, A( 1, J ), 1 )
269+
20 CONTINUE
270+
END IF
271+
END IF
263272
*
264273
* Call SKYTRD to reduce skew-symmetric matrix to tridiagonal form.
265274
*

0 commit comments

Comments
 (0)