Cloned library LAPACK-3.11.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

264 lines
7.1 KiB

*> \brief \b CLATSP
*
* =========== DOCUMENTATION ===========
*
* Online html documentation available at
* http://www.netlib.org/lapack/explore-html/
*
* Definition:
* ===========
*
* SUBROUTINE CLATSP( UPLO, N, X, ISEED )
*
* .. Scalar Arguments ..
* CHARACTER UPLO
* INTEGER N
* ..
* .. Array Arguments ..
* INTEGER ISEED( * )
* COMPLEX X( * )
* ..
*
*
*> \par Purpose:
* =============
*>
*> \verbatim
*>
*> CLATSP generates a special test matrix for the complex symmetric
*> (indefinite) factorization for packed matrices. The pivot blocks of
*> the generated matrix will be in the following order:
*> 2x2 pivot block, non diagonalizable
*> 1x1 pivot block
*> 2x2 pivot block, diagonalizable
*> (cycle repeats)
*> A row interchange is required for each non-diagonalizable 2x2 block.
*> \endverbatim
*
* Arguments:
* ==========
*
*> \param[in] UPLO
*> \verbatim
*> UPLO is CHARACTER
*> Specifies whether the generated matrix is to be upper or
*> lower triangular.
*> = 'U': Upper triangular
*> = 'L': Lower triangular
*> \endverbatim
*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> The dimension of the matrix to be generated.
*> \endverbatim
*>
*> \param[out] X
*> \verbatim
*> X is COMPLEX array, dimension (N*(N+1)/2)
*> The generated matrix in packed storage format. The matrix
*> consists of 3x3 and 2x2 diagonal blocks which result in the
*> pivot sequence given above. The matrix outside these
*> diagonal blocks is zero.
*> \endverbatim
*>
*> \param[in,out] ISEED
*> \verbatim
*> ISEED is INTEGER array, dimension (4)
*> On entry, the seed for the random number generator. The last
*> of the four integers must be odd. (modified on exit)
*> \endverbatim
*
* Authors:
* ========
*
*> \author Univ. of Tennessee
*> \author Univ. of California Berkeley
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
*> \ingroup complex_lin
*
* =====================================================================
SUBROUTINE CLATSP( UPLO, N, X, ISEED )
*
* -- LAPACK test routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
*
* .. Scalar Arguments ..
CHARACTER UPLO
INTEGER N
* ..
* .. Array Arguments ..
INTEGER ISEED( * )
COMPLEX X( * )
* ..
*
* =====================================================================
*
* .. Parameters ..
COMPLEX EYE
PARAMETER ( EYE = ( 0.0, 1.0 ) )
* ..
* .. Local Scalars ..
INTEGER J, JJ, N5
REAL ALPHA, ALPHA3, BETA
COMPLEX A, B, C, R
* ..
* .. External Functions ..
COMPLEX CLARND
EXTERNAL CLARND
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, SQRT
* ..
* .. Executable Statements ..
*
* Initialize constants
*
ALPHA = ( 1.+SQRT( 17. ) ) / 8.
BETA = ALPHA - 1. / 1000.
ALPHA3 = ALPHA*ALPHA*ALPHA
*
* Fill the matrix with zeros.
*
DO 10 J = 1, N*( N+1 ) / 2
X( J ) = 0.0
10 CONTINUE
*
* UPLO = 'U': Upper triangular storage
*
IF( UPLO.EQ.'U' ) THEN
N5 = N / 5
N5 = N - 5*N5 + 1
*
JJ = N*( N+1 ) / 2
DO 20 J = N, N5, -5
A = ALPHA3*CLARND( 5, ISEED )
B = CLARND( 5, ISEED ) / ALPHA
C = A - 2.*B*EYE
R = C / BETA
X( JJ ) = A
X( JJ-2 ) = B
JJ = JJ - J
X( JJ ) = CLARND( 2, ISEED )
X( JJ-1 ) = R
JJ = JJ - ( J-1 )
X( JJ ) = C
JJ = JJ - ( J-2 )
X( JJ ) = CLARND( 2, ISEED )
JJ = JJ - ( J-3 )
X( JJ ) = CLARND( 2, ISEED )
IF( ABS( X( JJ+( J-3 ) ) ).GT.ABS( X( JJ ) ) ) THEN
X( JJ+( J-4 ) ) = 2.0*X( JJ+( J-3 ) )
ELSE
X( JJ+( J-4 ) ) = 2.0*X( JJ )
END IF
JJ = JJ - ( J-4 )
20 CONTINUE
*
* Clean-up for N not a multiple of 5.
*
J = N5 - 1
IF( J.GT.2 ) THEN
A = ALPHA3*CLARND( 5, ISEED )
B = CLARND( 5, ISEED ) / ALPHA
C = A - 2.*B*EYE
R = C / BETA
X( JJ ) = A
X( JJ-2 ) = B
JJ = JJ - J
X( JJ ) = CLARND( 2, ISEED )
X( JJ-1 ) = R
JJ = JJ - ( J-1 )
X( JJ ) = C
JJ = JJ - ( J-2 )
J = J - 3
END IF
IF( J.GT.1 ) THEN
X( JJ ) = CLARND( 2, ISEED )
X( JJ-J ) = CLARND( 2, ISEED )
IF( ABS( X( JJ ) ).GT.ABS( X( JJ-J ) ) ) THEN
X( JJ-1 ) = 2.0*X( JJ )
ELSE
X( JJ-1 ) = 2.0*X( JJ-J )
END IF
JJ = JJ - J - ( J-1 )
J = J - 2
ELSE IF( J.EQ.1 ) THEN
X( JJ ) = CLARND( 2, ISEED )
J = J - 1
END IF
*
* UPLO = 'L': Lower triangular storage
*
ELSE
N5 = N / 5
N5 = N5*5
*
JJ = 1
DO 30 J = 1, N5, 5
A = ALPHA3*CLARND( 5, ISEED )
B = CLARND( 5, ISEED ) / ALPHA
C = A - 2.*B*EYE
R = C / BETA
X( JJ ) = A
X( JJ+2 ) = B
JJ = JJ + ( N-J+1 )
X( JJ ) = CLARND( 2, ISEED )
X( JJ+1 ) = R
JJ = JJ + ( N-J )
X( JJ ) = C
JJ = JJ + ( N-J-1 )
X( JJ ) = CLARND( 2, ISEED )
JJ = JJ + ( N-J-2 )
X( JJ ) = CLARND( 2, ISEED )
IF( ABS( X( JJ-( N-J-2 ) ) ).GT.ABS( X( JJ ) ) ) THEN
X( JJ-( N-J-2 )+1 ) = 2.0*X( JJ-( N-J-2 ) )
ELSE
X( JJ-( N-J-2 )+1 ) = 2.0*X( JJ )
END IF
JJ = JJ + ( N-J-3 )
30 CONTINUE
*
* Clean-up for N not a multiple of 5.
*
J = N5 + 1
IF( J.LT.N-1 ) THEN
A = ALPHA3*CLARND( 5, ISEED )
B = CLARND( 5, ISEED ) / ALPHA
C = A - 2.*B*EYE
R = C / BETA
X( JJ ) = A
X( JJ+2 ) = B
JJ = JJ + ( N-J+1 )
X( JJ ) = CLARND( 2, ISEED )
X( JJ+1 ) = R
JJ = JJ + ( N-J )
X( JJ ) = C
JJ = JJ + ( N-J-1 )
J = J + 3
END IF
IF( J.LT.N ) THEN
X( JJ ) = CLARND( 2, ISEED )
X( JJ+( N-J+1 ) ) = CLARND( 2, ISEED )
IF( ABS( X( JJ ) ).GT.ABS( X( JJ+( N-J+1 ) ) ) ) THEN
X( JJ+1 ) = 2.0*X( JJ )
ELSE
X( JJ+1 ) = 2.0*X( JJ+( N-J+1 ) )
END IF
JJ = JJ + ( N-J+1 ) + ( N-J )
J = J + 2
ELSE IF( J.EQ.N ) THEN
X( JJ ) = CLARND( 2, ISEED )
JJ = JJ + ( N-J+1 )
J = J + 1
END IF
END IF
*
RETURN
*
* End of CLATSP
*
END