@@ -134,7 +134,6 @@ REAL FUNCTION CLANHB( NORM, UPLO, N, K, AB, LDAB,
134134* -- LAPACK is a software package provided by Univ. of Tennessee, --
135135* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
136136*
137- IMPLICIT NONE
138137* .. Scalar Arguments ..
139138 CHARACTER NORM, UPLO
140139 INTEGER K, LDAB, N
@@ -152,17 +151,14 @@ REAL FUNCTION CLANHB( NORM, UPLO, N, K, AB, LDAB,
152151* ..
153152* .. Local Scalars ..
154153 INTEGER I, J, L
155- REAL ABSA, SUM, VALUE
156- * ..
157- * .. Local Arrays ..
158- REAL SSQ( 2 ), COLSSQ( 2 )
154+ REAL ABSA, SCALE, SUM, VALUE
159155* ..
160156* .. External Functions ..
161157 LOGICAL LSAME, SISNAN
162158 EXTERNAL LSAME, SISNAN
163159* ..
164160* .. External Subroutines ..
165- EXTERNAL CLASSQ, SCOMBSSQ
161+ EXTERNAL CLASSQ
166162* ..
167163* .. Intrinsic Functions ..
168164 INTRINSIC ABS, MAX, MIN, REAL , SQRT
@@ -234,57 +230,39 @@ REAL FUNCTION CLANHB( NORM, UPLO, N, K, AB, LDAB,
234230 ELSE IF ( ( LSAME( NORM, ' F' ) ) .OR. ( LSAME( NORM, ' E' ) ) ) THEN
235231*
236232* Find normF(A).
237- * SSQ(1) is scale
238- * SSQ(2) is sum-of-squares
239- * For better accuracy, sum each column separately.
240- *
241- SSQ( 1 ) = ZERO
242- SSQ( 2 ) = ONE
243- *
244- * Sum off-diagonals
245233*
234+ SCALE = ZERO
235+ SUM = ONE
246236 IF ( K.GT. 0 ) THEN
247237 IF ( LSAME( UPLO, ' U' ) ) THEN
248238 DO 110 J = 2 , N
249- COLSSQ( 1 ) = ZERO
250- COLSSQ( 2 ) = ONE
251239 CALL CLASSQ( MIN ( J-1 , K ), AB( MAX ( K+2 - J, 1 ), J ),
252- $ 1 , COLSSQ( 1 ), COLSSQ( 2 ) )
253- CALL SCOMBSSQ( SSQ, COLSSQ )
240+ $ 1 , SCALE, SUM )
254241 110 CONTINUE
255242 L = K + 1
256243 ELSE
257244 DO 120 J = 1 , N - 1
258- COLSSQ( 1 ) = ZERO
259- COLSSQ( 2 ) = ONE
260- CALL CLASSQ( MIN ( N- J, K ), AB( 2 , J ), 1 ,
261- $ COLSSQ( 1 ), COLSSQ( 2 ) )
262- CALL SCOMBSSQ( SSQ, COLSSQ )
245+ CALL CLASSQ( MIN ( N- J, K ), AB( 2 , J ), 1 , SCALE,
246+ $ SUM )
263247 120 CONTINUE
264248 L = 1
265249 END IF
266- SSQ( 2 ) = 2 * SSQ( 2 )
250+ SUM = 2 * SUM
267251 ELSE
268252 L = 1
269253 END IF
270- *
271- * Sum diagonal
272- *
273- COLSSQ( 1 ) = ZERO
274- COLSSQ( 2 ) = ONE
275254 DO 130 J = 1 , N
276255 IF ( REAL ( AB( L, J ) ).NE. ZERO ) THEN
277256 ABSA = ABS ( REAL ( AB( L, J ) ) )
278- IF ( COLSSQ( 1 ) .LT. ABSA ) THEN
279- COLSSQ( 2 ) = ONE + COLSSQ( 2 ) * ( COLSSQ( 1 ) / ABSA )** 2
280- COLSSQ( 1 ) = ABSA
257+ IF ( SCALE .LT. ABSA ) THEN
258+ SUM = ONE + SUM * ( SCALE / ABSA )** 2
259+ SCALE = ABSA
281260 ELSE
282- COLSSQ( 2 ) = COLSSQ( 2 ) + ( ABSA / COLSSQ( 1 ) )** 2
261+ SUM = SUM + ( ABSA / SCALE )** 2
283262 END IF
284263 END IF
285264 130 CONTINUE
286- CALL SCOMBSSQ( SSQ, COLSSQ )
287- VALUE = SSQ( 1 )* SQRT ( SSQ( 2 ) )
265+ VALUE = SCALE* SQRT ( SUM )
288266 END IF
289267*
290268 CLANHB = VALUE
0 commit comments