1*> \brief \b SLANSB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a symmetric band matrix. 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8*> \htmlonly 9*> Download SLANSB + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slansb.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slansb.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slansb.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* REAL FUNCTION SLANSB( NORM, UPLO, N, K, AB, LDAB, 22* WORK ) 23* 24* .. Scalar Arguments .. 25* CHARACTER NORM, UPLO 26* INTEGER K, LDAB, N 27* .. 28* .. Array Arguments .. 29* REAL AB( LDAB, * ), WORK( * ) 30* .. 31* 32* 33*> \par Purpose: 34* ============= 35*> 36*> \verbatim 37*> 38*> SLANSB returns the value of the one norm, or the Frobenius norm, or 39*> the infinity norm, or the element of largest absolute value of an 40*> n by n symmetric band matrix A, with k super-diagonals. 41*> \endverbatim 42*> 43*> \return SLANSB 44*> \verbatim 45*> 46*> SLANSB = ( max(abs(A(i,j))), NORM = 'M' or 'm' 47*> ( 48*> ( norm1(A), NORM = '1', 'O' or 'o' 49*> ( 50*> ( normI(A), NORM = 'I' or 'i' 51*> ( 52*> ( normF(A), NORM = 'F', 'f', 'E' or 'e' 53*> 54*> where norm1 denotes the one norm of a matrix (maximum column sum), 55*> normI denotes the infinity norm of a matrix (maximum row sum) and 56*> normF denotes the Frobenius norm of a matrix (square root of sum of 57*> squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. 58*> \endverbatim 59* 60* Arguments: 61* ========== 62* 63*> \param[in] NORM 64*> \verbatim 65*> NORM is CHARACTER*1 66*> Specifies the value to be returned in SLANSB as described 67*> above. 68*> \endverbatim 69*> 70*> \param[in] UPLO 71*> \verbatim 72*> UPLO is CHARACTER*1 73*> Specifies whether the upper or lower triangular part of the 74*> band matrix A is supplied. 75*> = 'U': Upper triangular part is supplied 76*> = 'L': Lower triangular part is supplied 77*> \endverbatim 78*> 79*> \param[in] N 80*> \verbatim 81*> N is INTEGER 82*> The order of the matrix A. N >= 0. When N = 0, SLANSB is 83*> set to zero. 84*> \endverbatim 85*> 86*> \param[in] K 87*> \verbatim 88*> K is INTEGER 89*> The number of super-diagonals or sub-diagonals of the 90*> band matrix A. K >= 0. 91*> \endverbatim 92*> 93*> \param[in] AB 94*> \verbatim 95*> AB is REAL array, dimension (LDAB,N) 96*> The upper or lower triangle of the symmetric band matrix A, 97*> stored in the first K+1 rows of AB. The j-th column of A is 98*> stored in the j-th column of the array AB as follows: 99*> if UPLO = 'U', AB(k+1+i-j,j) = A(i,j) for max(1,j-k)<=i<=j; 100*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+k). 101*> \endverbatim 102*> 103*> \param[in] LDAB 104*> \verbatim 105*> LDAB is INTEGER 106*> The leading dimension of the array AB. LDAB >= K+1. 107*> \endverbatim 108*> 109*> \param[out] WORK 110*> \verbatim 111*> WORK is REAL array, dimension (MAX(1,LWORK)), 112*> where LWORK >= N when NORM = 'I' or '1' or 'O'; otherwise, 113*> WORK is not referenced. 114*> \endverbatim 115* 116* Authors: 117* ======== 118* 119*> \author Univ. of Tennessee 120*> \author Univ. of California Berkeley 121*> \author Univ. of Colorado Denver 122*> \author NAG Ltd. 123* 124*> \ingroup realOTHERauxiliary 125* 126* ===================================================================== 127 REAL FUNCTION SLANSB( NORM, UPLO, N, K, AB, LDAB, 128 $ WORK ) 129* 130* -- LAPACK auxiliary routine -- 131* -- LAPACK is a software package provided by Univ. of Tennessee, -- 132* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 133* 134 IMPLICIT NONE 135* .. Scalar Arguments .. 136 CHARACTER NORM, UPLO 137 INTEGER K, LDAB, N 138* .. 139* .. Array Arguments .. 140 REAL AB( LDAB, * ), WORK( * ) 141* .. 142* 143* ===================================================================== 144* 145* .. Parameters .. 146 REAL ONE, ZERO 147 PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 ) 148* .. 149* .. Local Scalars .. 150 INTEGER I, J, L 151 REAL ABSA, SUM, VALUE 152* .. 153* .. Local Arrays .. 154 REAL SSQ( 2 ), COLSSQ( 2 ) 155* .. 156* .. External Functions .. 157 LOGICAL LSAME, SISNAN 158 EXTERNAL LSAME, SISNAN 159* .. 160* .. External Subroutines .. 161 EXTERNAL SLASSQ, SCOMBSSQ 162* .. 163* .. Intrinsic Functions .. 164 INTRINSIC ABS, MAX, MIN, SQRT 165* .. 166* .. Executable Statements .. 167* 168 IF( N.EQ.0 ) THEN 169 VALUE = ZERO 170 ELSE IF( LSAME( NORM, 'M' ) ) THEN 171* 172* Find max(abs(A(i,j))). 173* 174 VALUE = ZERO 175 IF( LSAME( UPLO, 'U' ) ) THEN 176 DO 20 J = 1, N 177 DO 10 I = MAX( K+2-J, 1 ), K + 1 178 SUM = ABS( AB( I, J ) ) 179 IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM 180 10 CONTINUE 181 20 CONTINUE 182 ELSE 183 DO 40 J = 1, N 184 DO 30 I = 1, MIN( N+1-J, K+1 ) 185 SUM = ABS( AB( I, J ) ) 186 IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM 187 30 CONTINUE 188 40 CONTINUE 189 END IF 190 ELSE IF( ( LSAME( NORM, 'I' ) ) .OR. ( LSAME( NORM, 'O' ) ) .OR. 191 $ ( NORM.EQ.'1' ) ) THEN 192* 193* Find normI(A) ( = norm1(A), since A is symmetric). 194* 195 VALUE = ZERO 196 IF( LSAME( UPLO, 'U' ) ) THEN 197 DO 60 J = 1, N 198 SUM = ZERO 199 L = K + 1 - J 200 DO 50 I = MAX( 1, J-K ), J - 1 201 ABSA = ABS( AB( L+I, J ) ) 202 SUM = SUM + ABSA 203 WORK( I ) = WORK( I ) + ABSA 204 50 CONTINUE 205 WORK( J ) = SUM + ABS( AB( K+1, J ) ) 206 60 CONTINUE 207 DO 70 I = 1, N 208 SUM = WORK( I ) 209 IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM 210 70 CONTINUE 211 ELSE 212 DO 80 I = 1, N 213 WORK( I ) = ZERO 214 80 CONTINUE 215 DO 100 J = 1, N 216 SUM = WORK( J ) + ABS( AB( 1, J ) ) 217 L = 1 - J 218 DO 90 I = J + 1, MIN( N, J+K ) 219 ABSA = ABS( AB( L+I, J ) ) 220 SUM = SUM + ABSA 221 WORK( I ) = WORK( I ) + ABSA 222 90 CONTINUE 223 IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM 224 100 CONTINUE 225 END IF 226 ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN 227* 228* Find normF(A). 229* SSQ(1) is scale 230* SSQ(2) is sum-of-squares 231* For better accuracy, sum each column separately. 232* 233 SSQ( 1 ) = ZERO 234 SSQ( 2 ) = ONE 235* 236* Sum off-diagonals 237* 238 IF( K.GT.0 ) THEN 239 IF( LSAME( UPLO, 'U' ) ) THEN 240 DO 110 J = 2, N 241 COLSSQ( 1 ) = ZERO 242 COLSSQ( 2 ) = ONE 243 CALL SLASSQ( MIN( J-1, K ), AB( MAX( K+2-J, 1 ), J ), 244 $ 1, COLSSQ( 1 ), COLSSQ( 2 ) ) 245 CALL SCOMBSSQ( SSQ, COLSSQ ) 246 110 CONTINUE 247 L = K + 1 248 ELSE 249 DO 120 J = 1, N - 1 250 COLSSQ( 1 ) = ZERO 251 COLSSQ( 2 ) = ONE 252 CALL SLASSQ( MIN( N-J, K ), AB( 2, J ), 1, 253 $ COLSSQ( 1 ), COLSSQ( 2 ) ) 254 CALL SCOMBSSQ( SSQ, COLSSQ ) 255 120 CONTINUE 256 L = 1 257 END IF 258 SSQ( 2 ) = 2*SSQ( 2 ) 259 ELSE 260 L = 1 261 END IF 262* 263* Sum diagonal 264* 265 COLSSQ( 1 ) = ZERO 266 COLSSQ( 2 ) = ONE 267 CALL SLASSQ( N, AB( L, 1 ), LDAB, COLSSQ( 1 ), COLSSQ( 2 ) ) 268 CALL SCOMBSSQ( SSQ, COLSSQ ) 269 VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) ) 270 END IF 271* 272 SLANSB = VALUE 273 RETURN 274* 275* End of SLANSB 276* 277 END 278