00001 DOUBLE PRECISION FUNCTION DLANSB( NORM, UPLO, N, K, AB, LDAB,
00002 $ WORK )
00003
00004
00005
00006
00007
00008
00009
00010 CHARACTER NORM, UPLO
00011 INTEGER K, LDAB, N
00012
00013
00014 DOUBLE PRECISION AB( LDAB, * ), WORK( * )
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 DOUBLE PRECISION ONE, ZERO
00081 PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
00082
00083
00084 INTEGER I, J, L
00085 DOUBLE PRECISION ABSA, SCALE, SUM, VALUE
00086
00087
00088 EXTERNAL DLASSQ
00089
00090
00091 LOGICAL LSAME
00092 EXTERNAL LSAME
00093
00094
00095 INTRINSIC ABS, MAX, MIN, SQRT
00096
00097
00098
00099 IF( N.EQ.0 ) THEN
00100 VALUE = ZERO
00101 ELSE IF( LSAME( NORM, 'M' ) ) THEN
00102
00103
00104
00105 VALUE = ZERO
00106 IF( LSAME( UPLO, 'U' ) ) THEN
00107 DO 20 J = 1, N
00108 DO 10 I = MAX( K+2-J, 1 ), K + 1
00109 VALUE = MAX( VALUE, ABS( AB( I, J ) ) )
00110 10 CONTINUE
00111 20 CONTINUE
00112 ELSE
00113 DO 40 J = 1, N
00114 DO 30 I = 1, MIN( N+1-J, K+1 )
00115 VALUE = MAX( VALUE, ABS( AB( I, J ) ) )
00116 30 CONTINUE
00117 40 CONTINUE
00118 END IF
00119 ELSE IF( ( LSAME( NORM, 'I' ) ) .OR. ( LSAME( NORM, 'O' ) ) .OR.
00120 $ ( NORM.EQ.'1' ) ) THEN
00121
00122
00123
00124 VALUE = ZERO
00125 IF( LSAME( UPLO, 'U' ) ) THEN
00126 DO 60 J = 1, N
00127 SUM = ZERO
00128 L = K + 1 - J
00129 DO 50 I = MAX( 1, J-K ), J - 1
00130 ABSA = ABS( AB( L+I, J ) )
00131 SUM = SUM + ABSA
00132 WORK( I ) = WORK( I ) + ABSA
00133 50 CONTINUE
00134 WORK( J ) = SUM + ABS( AB( K+1, J ) )
00135 60 CONTINUE
00136 DO 70 I = 1, N
00137 VALUE = MAX( VALUE, WORK( I ) )
00138 70 CONTINUE
00139 ELSE
00140 DO 80 I = 1, N
00141 WORK( I ) = ZERO
00142 80 CONTINUE
00143 DO 100 J = 1, N
00144 SUM = WORK( J ) + ABS( AB( 1, J ) )
00145 L = 1 - J
00146 DO 90 I = J + 1, MIN( N, J+K )
00147 ABSA = ABS( AB( L+I, J ) )
00148 SUM = SUM + ABSA
00149 WORK( I ) = WORK( I ) + ABSA
00150 90 CONTINUE
00151 VALUE = MAX( VALUE, SUM )
00152 100 CONTINUE
00153 END IF
00154 ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
00155
00156
00157
00158 SCALE = ZERO
00159 SUM = ONE
00160 IF( K.GT.0 ) THEN
00161 IF( LSAME( UPLO, 'U' ) ) THEN
00162 DO 110 J = 2, N
00163 CALL DLASSQ( MIN( J-1, K ), AB( MAX( K+2-J, 1 ), J ),
00164 $ 1, SCALE, SUM )
00165 110 CONTINUE
00166 L = K + 1
00167 ELSE
00168 DO 120 J = 1, N - 1
00169 CALL DLASSQ( MIN( N-J, K ), AB( 2, J ), 1, SCALE,
00170 $ SUM )
00171 120 CONTINUE
00172 L = 1
00173 END IF
00174 SUM = 2*SUM
00175 ELSE
00176 L = 1
00177 END IF
00178 CALL DLASSQ( N, AB( L, 1 ), LDAB, SCALE, SUM )
00179 VALUE = SCALE*SQRT( SUM )
00180 END IF
00181
00182 DLANSB = VALUE
00183 RETURN
00184
00185
00186
00187 END