Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions SRC/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,8 @@ set(SLASRC
stplqt.f stplqt2.f stpmlqt.f
ssytrd_2stage.f ssytrd_sy2sb.f ssytrd_sb2st.F ssb2st_kernels.f
ssyevd_2stage.f ssyev_2stage.f ssyevx_2stage.f ssyevr_2stage.f
ssbev_2stage.f ssbevx_2stage.f ssbevd_2stage.f ssygv_2stage.f)
ssbev_2stage.f ssbevx_2stage.f ssbevd_2stage.f ssygv_2stage.f
scombssq.f)

set(DSLASRC spotrs.f sgetrs.f spotrf.f sgetrf.f)

Expand Down Expand Up @@ -341,7 +342,8 @@ set(DLASRC
dtplqt.f dtplqt2.f dtpmlqt.f
dsytrd_2stage.f dsytrd_sy2sb.f dsytrd_sb2st.F dsb2st_kernels.f
dsyevd_2stage.f dsyev_2stage.f dsyevx_2stage.f dsyevr_2stage.f
dsbev_2stage.f dsbevx_2stage.f dsbevd_2stage.f dsygv_2stage.f)
dsbev_2stage.f dsbevx_2stage.f dsbevd_2stage.f dsygv_2stage.f
dcombssq.f)

set(DXLASRC dgesvxx.f dgerfsx.f dla_gerfsx_extended.f dla_geamv.f
dla_gercond.f dla_gerpvgrw.f dsysvxx.f dsyrfsx.f
Expand Down
4 changes: 2 additions & 2 deletions SRC/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ SLASRC = \
ssytrd_2stage.o ssytrd_sy2sb.o ssytrd_sb2st.o ssb2st_kernels.o \
ssyevd_2stage.o ssyev_2stage.o ssyevx_2stage.o ssyevr_2stage.o \
ssbev_2stage.o ssbevx_2stage.o ssbevd_2stage.o ssygv_2stage.o \
sgesvdq.o
sgesvdq.o scombssq.o

DSLASRC = spotrs.o sgetrs.o spotrf.o sgetrf.o

Expand Down Expand Up @@ -373,7 +373,7 @@ DLASRC = \
dsytrd_2stage.o dsytrd_sy2sb.o dsytrd_sb2st.o dsb2st_kernels.o \
dsyevd_2stage.o dsyev_2stage.o dsyevx_2stage.o dsyevr_2stage.o \
dsbev_2stage.o dsbevx_2stage.o dsbevd_2stage.o dsygv_2stage.o \
dgesvdq.o
dgesvdq.o dcombssq.o

ifdef USEXBLAS
DXLASRC = dgesvxx.o dgerfsx.o dla_gerfsx_extended.o dla_geamv.o \
Expand Down
23 changes: 17 additions & 6 deletions SRC/clangb.f
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ REAL FUNCTION CLANGB( NORM, N, KL, KU, AB, LDAB,
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* December 2016
*
IMPLICIT NONE
* .. Scalar Arguments ..
CHARACTER NORM
INTEGER KL, KU, LDAB, N
Expand All @@ -147,14 +148,17 @@ REAL FUNCTION CLANGB( NORM, N, KL, KU, AB, LDAB,
* ..
* .. Local Scalars ..
INTEGER I, J, K, L
REAL SCALE, SUM, VALUE, TEMP
REAL SUM, VALUE, TEMP
* ..
* .. Local Arrays ..
REAL SSQ( 2 ), COLSSQ( 2 )
* ..
* .. External Functions ..
LOGICAL LSAME, SISNAN
EXTERNAL LSAME, SISNAN
* ..
* .. External Subroutines ..
EXTERNAL CLASSQ
EXTERNAL CLASSQ, SCOMBSSQ
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, MAX, MIN, SQRT
Expand Down Expand Up @@ -207,15 +211,22 @@ REAL FUNCTION CLANGB( NORM, N, KL, KU, AB, LDAB,
ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
*
* Find normF(A).
* SSQ(1) is scale
* SSQ(2) is sum-of-squares
* For better accuracy, sum each column separately.
*
SCALE = ZERO
SUM = ONE
SSQ( 1 ) = ZERO
SSQ( 2 ) = ONE
DO 90 J = 1, N
L = MAX( 1, J-KU )
K = KU + 1 - J + L
CALL CLASSQ( MIN( N, J+KL )-L+1, AB( K, J ), 1, SCALE, SUM )
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
CALL CLASSQ( MIN( N, J+KL )-L+1, AB( K, J ), 1,
$ COLSSQ( 1 ), COLSSQ( 2 ) )
CALL SCOMBSSQ( SSQ, COLSSQ )
90 CONTINUE
VALUE = SCALE*SQRT( SUM )
VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) )
END IF
*
CLANGB = VALUE
Expand Down
22 changes: 16 additions & 6 deletions SRC/clange.f
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ REAL FUNCTION CLANGE( NORM, M, N, A, LDA, WORK )
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* December 2016
*
IMPLICIT NONE
* .. Scalar Arguments ..
CHARACTER NORM
INTEGER LDA, M, N
Expand All @@ -137,14 +138,17 @@ REAL FUNCTION CLANGE( NORM, M, N, A, LDA, WORK )
* ..
* .. Local Scalars ..
INTEGER I, J
REAL SCALE, SUM, VALUE, TEMP
REAL SUM, VALUE, TEMP
* ..
* .. Local Arrays ..
REAL SSQ( 2 ), COLSSQ( 2 )
* ..
* .. External Functions ..
LOGICAL LSAME, SISNAN
EXTERNAL LSAME, SISNAN
* ..
* .. External Subroutines ..
EXTERNAL CLASSQ
EXTERNAL CLASSQ, SCOMBSSQ
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, MIN, SQRT
Expand Down Expand Up @@ -196,13 +200,19 @@ REAL FUNCTION CLANGE( NORM, M, N, A, LDA, WORK )
ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
*
* Find normF(A).
* SSQ(1) is scale
* SSQ(2) is sum-of-squares
* For better accuracy, sum each column separately.
*
SCALE = ZERO
SUM = ONE
SSQ( 1 ) = ZERO
SSQ( 2 ) = ONE
DO 90 J = 1, N
CALL CLASSQ( M, A( 1, J ), 1, SCALE, SUM )
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
CALL CLASSQ( M, A( 1, J ), 1, COLSSQ( 1 ), COLSSQ( 2 ) )
CALL SCOMBSSQ( SSQ, COLSSQ )
90 CONTINUE
VALUE = SCALE*SQRT( SUM )
VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) )
END IF
*
CLANGE = VALUE
Expand Down
48 changes: 35 additions & 13 deletions SRC/clanhb.f
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ REAL FUNCTION CLANHB( NORM, UPLO, N, K, AB, LDAB,
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* December 2016
*
IMPLICIT NONE
* .. Scalar Arguments ..
CHARACTER NORM, UPLO
INTEGER K, LDAB, N
Expand All @@ -154,14 +155,17 @@ REAL FUNCTION CLANHB( NORM, UPLO, N, K, AB, LDAB,
* ..
* .. Local Scalars ..
INTEGER I, J, L
REAL ABSA, SCALE, SUM, VALUE
REAL ABSA, SUM, VALUE
* ..
* .. Local Arrays ..
REAL SSQ( 2 ), COLSSQ( 2 )
* ..
* .. External Functions ..
LOGICAL LSAME, SISNAN
EXTERNAL LSAME, SISNAN
* ..
* .. External Subroutines ..
EXTERNAL CLASSQ
EXTERNAL CLASSQ, SCOMBSSQ
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, MAX, MIN, REAL, SQRT
Expand Down Expand Up @@ -233,39 +237,57 @@ REAL FUNCTION CLANHB( NORM, UPLO, N, K, AB, LDAB,
ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
*
* Find normF(A).
* SSQ(1) is scale
* SSQ(2) is sum-of-squares
* For better accuracy, sum each column separately.
*
SSQ( 1 ) = ZERO
SSQ( 2 ) = ONE
*
* Sum off-diagonals
*
SCALE = ZERO
SUM = ONE
IF( K.GT.0 ) THEN
IF( LSAME( UPLO, 'U' ) ) THEN
DO 110 J = 2, N
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
CALL CLASSQ( MIN( J-1, K ), AB( MAX( K+2-J, 1 ), J ),
$ 1, SCALE, SUM )
$ 1, COLSSQ( 1 ), COLSSQ( 2 ) )
CALL SCOMBSSQ( SSQ, COLSSQ )
110 CONTINUE
L = K + 1
ELSE
DO 120 J = 1, N - 1
CALL CLASSQ( MIN( N-J, K ), AB( 2, J ), 1, SCALE,
$ SUM )
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
CALL CLASSQ( MIN( N-J, K ), AB( 2, J ), 1,
$ COLSSQ( 1 ), COLSSQ( 2 ) )
CALL SCOMBSSQ( SSQ, COLSSQ )
120 CONTINUE
L = 1
END IF
SUM = 2*SUM
SSQ( 2 ) = 2*SSQ( 2 )
ELSE
L = 1
END IF
*
* Sum diagonal
*
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
DO 130 J = 1, N
IF( REAL( AB( L, J ) ).NE.ZERO ) THEN
ABSA = ABS( REAL( AB( L, J ) ) )
IF( SCALE.LT.ABSA ) THEN
SUM = ONE + SUM*( SCALE / ABSA )**2
SCALE = ABSA
IF( COLSSQ( 1 ).LT.ABSA ) THEN
COLSSQ( 2 ) = ONE + COLSSQ(2)*( COLSSQ(1) / ABSA )**2
COLSSQ( 1 ) = ABSA
ELSE
SUM = SUM + ( ABSA / SCALE )**2
COLSSQ( 2 ) = COLSSQ( 2 ) + ( ABSA / COLSSQ( 1 ) )**2
END IF
END IF
130 CONTINUE
VALUE = SCALE*SQRT( SUM )
CALL SCOMBSSQ( SSQ, COLSSQ )
VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) )
END IF
*
CLANHB = VALUE
Expand Down
45 changes: 33 additions & 12 deletions SRC/clanhe.f
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ REAL FUNCTION CLANHE( NORM, UPLO, N, A, LDA, WORK )
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
* December 2016
*
IMPLICIT NONE
* .. Scalar Arguments ..
CHARACTER NORM, UPLO
INTEGER LDA, N
Expand All @@ -146,14 +147,17 @@ REAL FUNCTION CLANHE( NORM, UPLO, N, A, LDA, WORK )
* ..
* .. Local Scalars ..
INTEGER I, J
REAL ABSA, SCALE, SUM, VALUE
REAL ABSA, SUM, VALUE
* ..
* .. Local Arrays ..
REAL SSQ( 2 ), COLSSQ( 2 )
* ..
* .. External Functions ..
LOGICAL LSAME, SISNAN
EXTERNAL LSAME, SISNAN
* ..
* .. External Subroutines ..
EXTERNAL CLASSQ
EXTERNAL CLASSQ, SCOMBSSQ
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, REAL, SQRT
Expand Down Expand Up @@ -223,31 +227,48 @@ REAL FUNCTION CLANHE( NORM, UPLO, N, A, LDA, WORK )
ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
*
* Find normF(A).
* SSQ(1) is scale
* SSQ(2) is sum-of-squares
* For better accuracy, sum each column separately.
*
SSQ( 1 ) = ZERO
SSQ( 2 ) = ONE
*
* Sum off-diagonals
*
SCALE = ZERO
SUM = ONE
IF( LSAME( UPLO, 'U' ) ) THEN
DO 110 J = 2, N
CALL CLASSQ( J-1, A( 1, J ), 1, SCALE, SUM )
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
CALL CLASSQ( J-1, A( 1, J ), 1,
$ COLSSQ( 1 ), COLSSQ( 2 ) )
CALL SCOMBSSQ( SSQ, COLSSQ )
110 CONTINUE
ELSE
DO 120 J = 1, N - 1
CALL CLASSQ( N-J, A( J+1, J ), 1, SCALE, SUM )
COLSSQ( 1 ) = ZERO
COLSSQ( 2 ) = ONE
CALL CLASSQ( N-J, A( J+1, J ), 1,
$ COLSSQ( 1 ), COLSSQ( 2 ) )
CALL SCOMBSSQ( SSQ, COLSSQ )
120 CONTINUE
END IF
SUM = 2*SUM
SSQ( 2 ) = 2*SSQ( 2 )
*
* Sum diagonal
*
DO 130 I = 1, N
IF( REAL( A( I, I ) ).NE.ZERO ) THEN
ABSA = ABS( REAL( A( I, I ) ) )
IF( SCALE.LT.ABSA ) THEN
SUM = ONE + SUM*( SCALE / ABSA )**2
SCALE = ABSA
IF( SSQ( 1 ).LT.ABSA ) THEN
SSQ( 2 ) = ONE + SSQ( 2 )*( SSQ( 1 ) / ABSA )**2
SSQ( 1 ) = ABSA
ELSE
SUM = SUM + ( ABSA / SCALE )**2
SSQ( 2 ) = SSQ( 2 ) + ( ABSA / SSQ( 1 ) )**2
END IF
END IF
130 CONTINUE
VALUE = SCALE*SQRT( SUM )
VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) )
END IF
*
CLANHE = VALUE
Expand Down
Loading