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