141 REAL FUNCTION SLANTR( NORM, UPLO, DIAG, M, N, A, LDA,
151 CHARACTER diag, norm, uplo
155 REAL a( lda, * ), work( * )
162 parameter( one = 1.0e+0, zero = 0.0e+0 )
170 REAL ssq( 2 ), colssq( 2 )
180 INTRINSIC abs, min, sqrt
184 IF( min( m, n ).EQ.0 )
THEN
186 ELSE IF(
lsame( norm,
'M' ) )
THEN
190 IF(
lsame( diag,
'U' ) )
THEN
192 IF(
lsame( uplo,
'U' ) )
THEN
194 DO 10 i = 1, min( m, j-1 )
195 sum = abs( a( i, j ) )
196 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
202 sum = abs( a( i, j ) )
203 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
209 IF(
lsame( uplo,
'U' ) )
THEN
211 DO 50 i = 1, min( m, j )
212 sum = abs( a( i, j ) )
213 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
219 sum = abs( a( i, j ) )
220 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
225 ELSE IF( (
lsame( norm,
'O' ) ) .OR. ( norm.EQ.
'1' ) )
THEN
230 udiag =
lsame( diag,
'U' )
231 IF(
lsame( uplo,
'U' ) )
THEN
233 IF( ( udiag ) .AND. ( j.LE.m ) )
THEN
236 sum = sum + abs( a( i, j ) )
240 DO 100 i = 1, min( m, j )
241 sum = sum + abs( a( i, j ) )
244 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
251 sum = sum + abs( a( i, j ) )
256 sum = sum + abs( a( i, j ) )
259 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
262 ELSE IF(
lsame( norm,
'I' ) )
THEN
266 IF(
lsame( uplo,
'U' ) )
THEN
267 IF(
lsame( diag,
'U' ) )
THEN
272 DO 160 i = 1, min( m, j-1 )
273 work( i ) = work( i ) + abs( a( i, j ) )
281 DO 190 i = 1, min( m, j )
282 work( i ) = work( i ) + abs( a( i, j ) )
287 IF(
lsame( diag,
'U' ) )
THEN
296 work( i ) = work( i ) + abs( a( i, j ) )
305 work( i ) = work( i ) + abs( a( i, j ) )
313 IF(
VALUE .LT. sum .OR.
sisnan( sum ) )
VALUE = sum
315 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
322 IF(
lsame( uplo,
'U' ) )
THEN
323 IF(
lsame( diag,
'U' ) )
THEN
325 ssq( 2 ) = min( m, n )
329 CALL slassq( min( m, j-1 ), a( 1, j ), 1,
330 $ colssq( 1 ), colssq( 2 ) )
339 CALL slassq( min( m, j ), a( 1, j ), 1,
340 $ colssq( 1 ), colssq( 2 ) )
345 IF(
lsame( diag,
'U' ) )
THEN
347 ssq( 2 ) = min( m, n )
351 CALL slassq( m-j, a( min( m, j+1 ), j ), 1,
352 $ colssq( 1 ), colssq( 2 ) )
361 CALL slassq( m-j+1, a( j, j ), 1,
362 $ colssq( 1 ), colssq( 2 ) )
367 VALUE = ssq( 1 )*sqrt( ssq( 2 ) )