268 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Fortran
		
	
	
	
| *> \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. 
 | |
| *
 | |
| *> \date November 2011
 | |
| *
 | |
| *> \ingroup complex_lin
 | |
| *
 | |
| *  =====================================================================
 | |
|       SUBROUTINE CLATSP( UPLO, N, X, ISEED )
 | |
| *
 | |
| *  -- LAPACK test routine (version 3.4.0) --
 | |
| *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 | |
| *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 | |
| *     November 2011
 | |
| *
 | |
| *     .. 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
 |