139 REAL function
slantr( norm, uplo, diag, m, n, a, lda,
148 CHARACTER diag, norm, uplo
152 REAL a( lda, * ), work( * )
159 parameter( one = 1.0e+0, zero = 0.0e+0 )
167 REAL ssq( 2 ), colssq( 2 )
177 INTRINSIC abs, min, sqrt
181 IF( min( m, n ).EQ.0 )
THEN
183 ELSE IF(
lsame( norm,
'M' ) )
THEN
187 IF(
lsame( diag,
'U' ) )
THEN
189 IF(
lsame( uplo,
'U' ) )
THEN
191 DO 10 i = 1, min( m, j-1 )
192 sum = abs( a( i, j ) )
193 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
199 sum = abs( a( i, j ) )
200 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
206 IF(
lsame( uplo,
'U' ) )
THEN
208 DO 50 i = 1, min( m, j )
209 sum = abs( a( i, j ) )
210 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
216 sum = abs( a( i, j ) )
217 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
222 ELSE IF( (
lsame( norm,
'O' ) ) .OR. ( norm.EQ.
'1' ) )
THEN
227 udiag =
lsame( diag,
'U' )
228 IF(
lsame( uplo,
'U' ) )
THEN
230 IF( ( udiag ) .AND. ( j.LE.m ) )
THEN
233 sum = sum + abs( a( i, j ) )
237 DO 100 i = 1, min( m, j )
238 sum = sum + abs( a( i, j ) )
241 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
248 sum = sum + abs( a( i, j ) )
253 sum = sum + abs( a( i, j ) )
256 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
259 ELSE IF(
lsame( norm,
'I' ) )
THEN
263 IF(
lsame( uplo,
'U' ) )
THEN
264 IF(
lsame( diag,
'U' ) )
THEN
269 DO 160 i = 1, min( m, j-1 )
270 work( i ) = work( i ) + abs( a( i, j ) )
278 DO 190 i = 1, min( m, j )
279 work( i ) = work( i ) + abs( a( i, j ) )
284 IF(
lsame( diag,
'U' ) )
THEN
285 DO 210 i = 1, min( m, n )
293 work( i ) = work( i ) + abs( a( i, j ) )
302 work( i ) = work( i ) + abs( a( 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
322 ssq( 2 ) = min( m, n )
326 CALL slassq( min( m, j-1 ), a( 1, j ), 1,
327 $ colssq( 1 ), colssq( 2 ) )
336 CALL slassq( min( m, j ), a( 1, j ), 1,
337 $ colssq( 1 ), colssq( 2 ) )
342 IF(
lsame( diag,
'U' ) )
THEN
344 ssq( 2 ) = min( m, n )
348 CALL slassq( m-j, a( min( m, j+1 ), j ), 1,
349 $ colssq( 1 ), colssq( 2 ) )
358 CALL slassq( m-j+1, a( j, j ), 1,
359 $ colssq( 1 ), colssq( 2 ) )
364 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 slantr(NORM, UPLO, DIAG, M, N, A, LDA, WORK)
SLANTR returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...