Those are just cosmetic changes to update version number and various other minor change.
126 lines
3.5 KiB
FortranFixed
126 lines
3.5 KiB
FortranFixed
DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
|
|
*
|
|
* -- LAPACK auxiliary routine (version 3.2) --
|
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
|
* November 2006
|
|
*
|
|
* .. Scalar Arguments ..
|
|
CHARACTER NORM
|
|
INTEGER N
|
|
* ..
|
|
* .. Array Arguments ..
|
|
DOUBLE PRECISION D( * ), E( * )
|
|
* ..
|
|
*
|
|
* Purpose
|
|
* =======
|
|
*
|
|
* DLANST returns the value of the one norm, or the Frobenius norm, or
|
|
* the infinity norm, or the element of largest absolute value of a
|
|
* real symmetric tridiagonal matrix A.
|
|
*
|
|
* Description
|
|
* ===========
|
|
*
|
|
* DLANST returns the value
|
|
*
|
|
* DLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm'
|
|
* (
|
|
* ( norm1(A), NORM = '1', 'O' or 'o'
|
|
* (
|
|
* ( normI(A), NORM = 'I' or 'i'
|
|
* (
|
|
* ( normF(A), NORM = 'F', 'f', 'E' or 'e'
|
|
*
|
|
* where norm1 denotes the one norm of a matrix (maximum column sum),
|
|
* normI denotes the infinity norm of a matrix (maximum row sum) and
|
|
* normF denotes the Frobenius norm of a matrix (square root of sum of
|
|
* squares). Note that max(abs(A(i,j))) is not a consistent matrix norm.
|
|
*
|
|
* Arguments
|
|
* =========
|
|
*
|
|
* NORM (input) CHARACTER*1
|
|
* Specifies the value to be returned in DLANST as described
|
|
* above.
|
|
*
|
|
* N (input) INTEGER
|
|
* The order of the matrix A. N >= 0. When N = 0, DLANST is
|
|
* set to zero.
|
|
*
|
|
* D (input) DOUBLE PRECISION array, dimension (N)
|
|
* The diagonal elements of A.
|
|
*
|
|
* E (input) DOUBLE PRECISION array, dimension (N-1)
|
|
* The (n-1) sub-diagonal or super-diagonal elements of A.
|
|
*
|
|
* =====================================================================
|
|
*
|
|
* .. Parameters ..
|
|
DOUBLE PRECISION ONE, ZERO
|
|
PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
|
|
* ..
|
|
* .. Local Scalars ..
|
|
INTEGER I
|
|
DOUBLE PRECISION ANORM, SCALE, SUM
|
|
* ..
|
|
* .. External Functions ..
|
|
LOGICAL LSAME
|
|
EXTERNAL LSAME
|
|
* ..
|
|
* .. External Subroutines ..
|
|
EXTERNAL DLASSQ
|
|
* ..
|
|
* .. Intrinsic Functions ..
|
|
INTRINSIC ABS, MAX, SQRT
|
|
* ..
|
|
* .. Executable Statements ..
|
|
*
|
|
IF( N.LE.0 ) THEN
|
|
ANORM = ZERO
|
|
ELSE IF( LSAME( NORM, 'M' ) ) THEN
|
|
*
|
|
* Find max(abs(A(i,j))).
|
|
*
|
|
ANORM = ABS( D( N ) )
|
|
DO 10 I = 1, N - 1
|
|
ANORM = MAX( ANORM, ABS( D( I ) ) )
|
|
ANORM = MAX( ANORM, ABS( E( I ) ) )
|
|
10 CONTINUE
|
|
ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
|
|
$ LSAME( NORM, 'I' ) ) THEN
|
|
*
|
|
* Find norm1(A).
|
|
*
|
|
IF( N.EQ.1 ) THEN
|
|
ANORM = ABS( D( 1 ) )
|
|
ELSE
|
|
ANORM = MAX( ABS( D( 1 ) )+ABS( E( 1 ) ),
|
|
$ ABS( E( N-1 ) )+ABS( D( N ) ) )
|
|
DO 20 I = 2, N - 1
|
|
ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+
|
|
$ ABS( E( I-1 ) ) )
|
|
20 CONTINUE
|
|
END IF
|
|
ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
|
|
*
|
|
* Find normF(A).
|
|
*
|
|
SCALE = ZERO
|
|
SUM = ONE
|
|
IF( N.GT.1 ) THEN
|
|
CALL DLASSQ( N-1, E, 1, SCALE, SUM )
|
|
SUM = 2*SUM
|
|
END IF
|
|
CALL DLASSQ( N, D, 1, SCALE, SUM )
|
|
ANORM = SCALE*SQRT( SUM )
|
|
END IF
|
|
*
|
|
DLANST = ANORM
|
|
RETURN
|
|
*
|
|
* End of DLANST
|
|
*
|
|
END
|