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 scombssq(V1, V2)
SCOMBSSQ adds two scaled sum of squares quantities
logical function sisnan(SIN)
SISNAN tests input for NaN.
subroutine slassq(N, X, INCX, SCALE, SUMSQ)
SLASSQ updates a sum of squares represented in scaled form.
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,...