Skip to content

Commit 0eb7706

Browse files
authored
Merge pull request #674 from angsch/scal
Update scaling routines to return immediately when scaling with one
2 parents a196113 + d0ad95c commit 0eb7706

File tree

10 files changed

+39
-9
lines changed

10 files changed

+39
-9
lines changed

BLAS/SRC/cscal.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,11 @@ SUBROUTINE CSCAL(N,CA,CX,INCX)
9393
* .. Local Scalars ..
9494
INTEGER I,NINCX
9595
* ..
96-
IF (N.LE.0 .OR. INCX.LE.0) RETURN
96+
* .. Parameters ..
97+
COMPLEX ONE
98+
PARAMETER (ONE= (1.0E+0,0.0E+0))
99+
* ..
100+
IF (N.LE.0 .OR. INCX.LE.0 .OR. CA.EQ.ONE) RETURN
97101
IF (INCX.EQ.1) THEN
98102
*
99103
* code for increment equal to 1

BLAS/SRC/csscal.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,14 @@ SUBROUTINE CSSCAL(N,SA,CX,INCX)
9393
* .. Local Scalars ..
9494
INTEGER I,NINCX
9595
* ..
96+
* .. Parameters ..
97+
REAL ONE
98+
PARAMETER (ONE=1.0E+0)
99+
* ..
96100
* .. Intrinsic Functions ..
97101
INTRINSIC AIMAG,CMPLX,REAL
98102
* ..
99-
IF (N.LE.0 .OR. INCX.LE.0) RETURN
103+
IF (N.LE.0 .OR. INCX.LE.0 .OR. SA.EQ.ONE) RETURN
100104
IF (INCX.EQ.1) THEN
101105
*
102106
* code for increment equal to 1

BLAS/SRC/dscal.f

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,14 @@ SUBROUTINE DSCAL(N,DA,DX,INCX)
9393
*
9494
* .. Local Scalars ..
9595
INTEGER I,M,MP1,NINCX
96+
* .. Parameters ..
97+
DOUBLE PRECISION ONE
98+
PARAMETER (ONE=1.0D+0)
9699
* ..
97100
* .. Intrinsic Functions ..
98101
INTRINSIC MOD
99102
* ..
100-
IF (N.LE.0 .OR. INCX.LE.0) RETURN
103+
IF (N.LE.0 .OR. INCX.LE.0 .OR. DA.EQ.ONE) RETURN
101104
IF (INCX.EQ.1) THEN
102105
*
103106
* code for increment equal to 1

BLAS/SRC/sscal.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,14 @@ SUBROUTINE SSCAL(N,SA,SX,INCX)
9494
* .. Local Scalars ..
9595
INTEGER I,M,MP1,NINCX
9696
* ..
97+
* .. Parameters ..
98+
REAL ONE
99+
PARAMETER (ONE=1.0E+0)
100+
* ..
97101
* .. Intrinsic Functions ..
98102
INTRINSIC MOD
99103
* ..
100-
IF (N.LE.0 .OR. INCX.LE.0) RETURN
104+
IF (N.LE.0 .OR. INCX.LE.0 .OR. SA.EQ.ONE) RETURN
101105
IF (INCX.EQ.1) THEN
102106
*
103107
* code for increment equal to 1

BLAS/SRC/zdscal.f

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,25 +92,28 @@ SUBROUTINE ZDSCAL(N,DA,ZX,INCX)
9292
*
9393
* .. Local Scalars ..
9494
INTEGER I,NINCX
95+
* .. Parameters ..
96+
DOUBLE PRECISION ONE
97+
PARAMETER (ONE=1.0D+0)
9598
* ..
9699
* .. Intrinsic Functions ..
97-
INTRINSIC DCMPLX
100+
INTRINSIC DBLE, DCMPLX, DIMAG
98101
* ..
99-
IF (N.LE.0 .OR. INCX.LE.0) RETURN
102+
IF (N.LE.0 .OR. INCX.LE.0 .OR. DA.EQ.ONE) RETURN
100103
IF (INCX.EQ.1) THEN
101104
*
102105
* code for increment equal to 1
103106
*
104107
DO I = 1,N
105-
ZX(I) = DCMPLX(DA,0.0d0)*ZX(I)
108+
ZX(I) = DCMPLX(DA*DBLE(ZX(I)),DA*DIMAG(ZX(I)))
106109
END DO
107110
ELSE
108111
*
109112
* code for increment not equal to 1
110113
*
111114
NINCX = N*INCX
112115
DO I = 1,NINCX,INCX
113-
ZX(I) = DCMPLX(DA,0.0d0)*ZX(I)
116+
ZX(I) = DCMPLX(DA*DBLE(ZX(I)),DA*DIMAG(ZX(I)))
114117
END DO
115118
END IF
116119
RETURN

BLAS/SRC/zscal.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,11 @@ SUBROUTINE ZSCAL(N,ZA,ZX,INCX)
9393
* .. Local Scalars ..
9494
INTEGER I,NINCX
9595
* ..
96-
IF (N.LE.0 .OR. INCX.LE.0) RETURN
96+
* .. Parameters ..
97+
COMPLEX*16 ONE
98+
PARAMETER (ONE= (1.0D+0,0.0D+0))
99+
* ..
100+
IF (N.LE.0 .OR. INCX.LE.0 .OR. ZA.EQ.ONE) RETURN
97101
IF (INCX.EQ.1) THEN
98102
*
99103
* code for increment equal to 1

SRC/clascl.f

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ SUBROUTINE CLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
272272
ELSE
273273
MUL = CTOC / CFROMC
274274
DONE = .TRUE.
275+
IF (MUL .EQ. ONE)
276+
$ RETURN
275277
END IF
276278
END IF
277279
*

SRC/dlascl.f

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
272272
ELSE
273273
MUL = CTOC / CFROMC
274274
DONE = .TRUE.
275+
IF (MUL .EQ. ONE)
276+
$ RETURN
275277
END IF
276278
END IF
277279
*

SRC/slascl.f

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ SUBROUTINE SLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
272272
ELSE
273273
MUL = CTOC / CFROMC
274274
DONE = .TRUE.
275+
IF (MUL .EQ. ONE)
276+
$ RETURN
275277
END IF
276278
END IF
277279
*

SRC/zlascl.f

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ SUBROUTINE ZLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
272272
ELSE
273273
MUL = CTOC / CFROMC
274274
DONE = .TRUE.
275+
IF (MUL .EQ. ONE)
276+
$ RETURN
275277
END IF
276278
END IF
277279
*

0 commit comments

Comments
 (0)