1*> \brief \b SLANGB returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of general 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 SLANGB + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slangb.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slangb.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slangb.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* REAL FUNCTION SLANGB( NORM, N, KL, KU, AB, LDAB, 22* WORK ) 23* 24* .. Scalar Arguments .. 25* CHARACTER NORM 26* INTEGER KL, KU, LDAB, N 27* .. 28* .. Array Arguments .. 29* REAL AB( LDAB, * ), WORK( * ) 30* .. 31* 32* 33*> \par Purpose: 34* ============= 35*> 36*> \verbatim 37*> 38*> SLANGB 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 band matrix A, with kl sub-diagonals and ku super-diagonals. 41*> \endverbatim 42*> 43*> \return SLANGB 44*> \verbatim 45*> 46*> SLANGB = ( 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 SLANGB as described 67*> above. 68*> \endverbatim 69*> 70*> \param[in] N 71*> \verbatim 72*> N is INTEGER 73*> The order of the matrix A. N >= 0. When N = 0, SLANGB is 74*> set to zero. 75*> \endverbatim 76*> 77*> \param[in] KL 78*> \verbatim 79*> KL is INTEGER 80*> The number of sub-diagonals of the matrix A. KL >= 0. 81*> \endverbatim 82*> 83*> \param[in] KU 84*> \verbatim 85*> KU is INTEGER 86*> The number of super-diagonals of the matrix A. KU >= 0. 87*> \endverbatim 88*> 89*> \param[in] AB 90*> \verbatim 91*> AB is REAL array, dimension (LDAB,N) 92*> The band matrix A, stored in rows 1 to KL+KU+1. The j-th 93*> column of A is stored in the j-th column of the array AB as 94*> follows: 95*> AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(n,j+kl). 96*> \endverbatim 97*> 98*> \param[in] LDAB 99*> \verbatim 100*> LDAB is INTEGER 101*> The leading dimension of the array AB. LDAB >= KL+KU+1. 102*> \endverbatim 103*> 104*> \param[out] WORK 105*> \verbatim 106*> WORK is REAL array, dimension (MAX(1,LWORK)), 107*> where LWORK >= N when NORM = 'I'; otherwise, WORK is not 108*> referenced. 109*> \endverbatim 110* 111* Authors: 112* ======== 113* 114*> \author Univ. of Tennessee 115*> \author Univ. of California Berkeley 116*> \author Univ. of Colorado Denver 117*> \author NAG Ltd. 118* 119*> \ingroup realGBauxiliary 120* 121* ===================================================================== 122 REAL FUNCTION SLANGB( NORM, N, KL, KU, AB, LDAB, 123 $ WORK ) 124* 125* -- LAPACK auxiliary routine -- 126* -- LAPACK is a software package provided by Univ. of Tennessee, -- 127* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 128* 129 IMPLICIT NONE 130* .. Scalar Arguments .. 131 CHARACTER NORM 132 INTEGER KL, KU, LDAB, N 133* .. 134* .. Array Arguments .. 135 REAL AB( LDAB, * ), WORK( * ) 136* .. 137* 138* ===================================================================== 139* 140* .. Parameters .. 141 REAL ONE, ZERO 142 PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 ) 143* .. 144* .. Local Scalars .. 145 INTEGER I, J, K, L 146 REAL SUM, VALUE, TEMP 147* .. 148* .. Local Arrays .. 149 REAL SSQ( 2 ), COLSSQ( 2 ) 150* .. 151* .. External Functions .. 152 LOGICAL LSAME, SISNAN 153 EXTERNAL LSAME, SISNAN 154* .. 155* .. External Subroutines .. 156 EXTERNAL SLASSQ, SCOMBSSQ 157* .. 158* .. Intrinsic Functions .. 159 INTRINSIC ABS, MAX, MIN, SQRT 160* .. 161* .. Executable Statements .. 162* 163 IF( N.EQ.0 ) THEN 164 VALUE = ZERO 165 ELSE IF( LSAME( NORM, 'M' ) ) THEN 166* 167* Find max(abs(A(i,j))). 168* 169 VALUE = ZERO 170 DO 20 J = 1, N 171 DO 10 I = MAX( KU+2-J, 1 ), MIN( N+KU+1-J, KL+KU+1 ) 172 TEMP = ABS( AB( I, J ) ) 173 IF( VALUE.LT.TEMP .OR. SISNAN( TEMP ) ) VALUE = TEMP 174 10 CONTINUE 175 20 CONTINUE 176 ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN 177* 178* Find norm1(A). 179* 180 VALUE = ZERO 181 DO 40 J = 1, N 182 SUM = ZERO 183 DO 30 I = MAX( KU+2-J, 1 ), MIN( N+KU+1-J, KL+KU+1 ) 184 SUM = SUM + ABS( AB( I, J ) ) 185 30 CONTINUE 186 IF( VALUE.LT.SUM .OR. SISNAN( SUM ) ) VALUE = SUM 187 40 CONTINUE 188 ELSE IF( LSAME( NORM, 'I' ) ) THEN 189* 190* Find normI(A). 191* 192 DO 50 I = 1, N 193 WORK( I ) = ZERO 194 50 CONTINUE 195 DO 70 J = 1, N 196 K = KU + 1 - J 197 DO 60 I = MAX( 1, J-KU ), MIN( N, J+KL ) 198 WORK( I ) = WORK( I ) + ABS( AB( K+I, J ) ) 199 60 CONTINUE 200 70 CONTINUE 201 VALUE = ZERO 202 DO 80 I = 1, N 203 TEMP = WORK( I ) 204 IF( VALUE.LT.TEMP .OR. SISNAN( TEMP ) ) VALUE = TEMP 205 80 CONTINUE 206 ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN 207* 208* Find normF(A). 209* SSQ(1) is scale 210* SSQ(2) is sum-of-squares 211* For better accuracy, sum each column separately. 212* 213 SSQ( 1 ) = ZERO 214 SSQ( 2 ) = ONE 215 DO 90 J = 1, N 216 L = MAX( 1, J-KU ) 217 K = KU + 1 - J + L 218 COLSSQ( 1 ) = ZERO 219 COLSSQ( 2 ) = ONE 220 CALL SLASSQ( MIN( N, J+KL )-L+1, AB( K, J ), 1, 221 $ COLSSQ( 1 ), COLSSQ( 2 ) ) 222 CALL SCOMBSSQ( SSQ, COLSSQ ) 223 90 CONTINUE 224 VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) ) 225 END IF 226* 227 SLANGB = VALUE 228 RETURN 229* 230* End of SLANGB 231* 232 END 233