--- rpl/lapack/lapack/dlansf.f 2011/11/21 22:19:32 1.8 +++ rpl/lapack/lapack/dlansf.f 2012/12/14 12:30:23 1.11 @@ -1,4 +1,4 @@ -*> \brief \b DLANSF +*> \brief \b DLANSF returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a symmetric matrix in RFP format. * * =========== DOCUMENTATION =========== * @@ -115,7 +115,7 @@ *> \author Univ. of Colorado Denver *> \author NAG Ltd. * -*> \date November 2011 +*> \date September 2012 * *> \ingroup doubleOTHERcomputational * @@ -209,10 +209,10 @@ * ===================================================================== DOUBLE PRECISION FUNCTION DLANSF( NORM, TRANSR, UPLO, N, A, WORK ) * -* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK computational routine (version 3.4.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* November 2011 +* September 2012 * * .. Scalar Arguments .. CHARACTER NORM, TRANSR, UPLO @@ -230,12 +230,11 @@ * .. * .. Local Scalars .. INTEGER I, J, IFM, ILU, NOE, N1, K, L, LDA - DOUBLE PRECISION SCALE, S, VALUE, AA + DOUBLE PRECISION SCALE, S, VALUE, AA, TEMP * .. * .. External Functions .. - LOGICAL LSAME - INTEGER IDAMAX - EXTERNAL LSAME, IDAMAX + LOGICAL LSAME, DISNAN + EXTERNAL LSAME, DISNAN * .. * .. External Subroutines .. EXTERNAL DLASSQ @@ -248,6 +247,9 @@ IF( N.EQ.0 ) THEN DLANSF = ZERO RETURN + ELSE IF( N.EQ.1 ) THEN + DLANSF = ABS( A(0) ) + RETURN END IF * * set noe = 1 if n is odd. if n is even set noe=0 @@ -296,14 +298,18 @@ * A is n by k DO J = 0, K - 1 DO I = 0, N - 1 - VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) ) + TEMP = ABS( A( I+J*LDA ) ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP END DO END DO ELSE * xpose case; A is k by n DO J = 0, N - 1 DO I = 0, K - 1 - VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) ) + TEMP = ABS( A( I+J*LDA ) ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP END DO END DO END IF @@ -313,14 +319,18 @@ * A is n+1 by k DO J = 0, K - 1 DO I = 0, N - VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) ) + TEMP = ABS( A( I+J*LDA ) ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP END DO END DO ELSE * xpose case; A is k by n+1 DO J = 0, N DO I = 0, K - 1 - VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) ) + TEMP = ABS( A( I+J*LDA ) ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP END DO END DO END IF @@ -366,8 +376,12 @@ WORK( J ) = WORK( J ) + S END DO 10 CONTINUE - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO ELSE * ilu = 1 K = K + 1 @@ -404,8 +418,12 @@ END DO WORK( J ) = WORK( J ) + S END DO - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO END IF ELSE * n is even @@ -438,8 +456,12 @@ END DO WORK( J ) = WORK( J ) + S END DO - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO ELSE * ilu = 1 DO I = K, N - 1 @@ -472,8 +494,12 @@ END DO WORK( J ) = WORK( J ) + S END DO - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO END IF END IF ELSE @@ -534,8 +560,12 @@ END DO WORK( J ) = WORK( J ) + S END DO - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO ELSE * ilu=1 K = K + 1 @@ -595,8 +625,12 @@ END DO WORK( J ) = WORK( J ) + S END DO - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO END IF ELSE * n is even @@ -664,8 +698,12 @@ * A(k-1,k-1) S = S + AA WORK( I ) = WORK( I ) + S - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO ELSE * ilu=1 DO I = K, N - 1 @@ -733,8 +771,12 @@ END DO WORK( J-1 ) = WORK( J-1 ) + S END DO - I = IDAMAX( N, WORK, 1 ) - VALUE = WORK( I-1 ) + VALUE = WORK( 0 ) + DO I = 1, N-1 + TEMP = WORK( I ) + IF( VALUE .LT. TEMP .OR. DISNAN( TEMP ) ) + $ VALUE = TEMP + END DO END IF END IF END IF