138 REAL function
slantb( norm, uplo, diag, n, k, ab,
147 CHARACTER diag, norm, uplo
151 REAL ab( ldab, * ), work( * )
158 parameter( one = 1.0e+0, zero = 0.0e+0 )
166 REAL ssq( 2 ), colssq( 2 )
176 INTRINSIC abs, max, min, sqrt
182 ELSE IF(
lsame( norm,
'M' ) )
THEN
186 IF(
lsame( diag,
'U' ) )
THEN
188 IF(
lsame( uplo,
'U' ) )
THEN
190 DO 10 i = max( k+2-j, 1 ), k
191 sum = abs( ab( i, j ) )
192 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
197 DO 30 i = 2, min( n+1-j, k+1 )
198 sum = abs( ab( i, j ) )
199 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
205 IF(
lsame( uplo,
'U' ) )
THEN
207 DO 50 i = max( k+2-j, 1 ), k + 1
208 sum = abs( ab( i, j ) )
209 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
214 DO 70 i = 1, min( n+1-j, k+1 )
215 sum = abs( ab( i, j ) )
216 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
221 ELSE IF( (
lsame( norm,
'O' ) ) .OR. ( norm.EQ.
'1' ) )
THEN
226 udiag =
lsame( diag,
'U' )
227 IF(
lsame( uplo,
'U' ) )
THEN
231 DO 90 i = max( k+2-j, 1 ), k
232 sum = sum + abs( ab( i, j ) )
236 DO 100 i = max( k+2-j, 1 ), k + 1
237 sum = sum + abs( ab( i, j ) )
240 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
246 DO 120 i = 2, min( n+1-j, k+1 )
247 sum = sum + abs( ab( i, j ) )
251 DO 130 i = 1, min( n+1-j, k+1 )
252 sum = sum + abs( ab( i, j ) )
255 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
258 ELSE IF(
lsame( norm,
'I' ) )
THEN
263 IF(
lsame( uplo,
'U' ) )
THEN
264 IF(
lsame( diag,
'U' ) )
THEN
270 DO 160 i = max( 1, j-k ), j - 1
271 work( i ) = work( i ) + abs( ab( l+i, j ) )
280 DO 190 i = max( 1, j-k ), j
281 work( i ) = work( i ) + abs( ab( l+i, j ) )
286 IF(
lsame( diag,
'U' ) )
THEN
292 DO 220 i = j + 1, min( n, j+k )
293 work( i ) = work( i ) + abs( ab( l+i, j ) )
302 DO 250 i = j, min( n, j+k )
303 work( i ) = work( i ) + abs( ab( l+i, j ) )
310 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
312 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
319 IF(
lsame( uplo,
'U' ) )
THEN
320 IF(
lsame( diag,
'U' ) )
THEN
327 CALL slassq( min( j-1, k ),
328 $ ab( max( k+2-j, 1 ), j ), 1,
329 $ colssq( 1 ), colssq( 2 ) )
339 CALL slassq( min( j, k+1 ), ab( max( k+2-j, 1 ), j ),
340 $ 1, colssq( 1 ), colssq( 2 ) )
345 IF(
lsame( diag,
'U' ) )
THEN
352 CALL slassq( min( n-j, k ), ab( 2, j ), 1,
353 $ colssq( 1 ), colssq( 2 ) )
363 CALL slassq( min( n-j+1, k+1 ), ab( 1, j ), 1,
364 $ colssq( 1 ), colssq( 2 ) )
369 VALUE = ssq( 1 )*sqrt( ssq( 2 ) )
subroutine slassq(n, x, incx, scl, sumsq)
SLASSQ updates a sum of squares represented in scaled form.
subroutine scombssq(V1, V2)
SCOMBSSQ adds two scaled sum of squares quantities
logical function sisnan(SIN)
SISNAN tests input for NaN.
logical function lsame(CA, CB)
LSAME
real function slantb(NORM, UPLO, DIAG, N, K, AB, LDAB, WORK)
SLANTB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...