Annotation of rpl/lapack/lapack/zupgtr.f, revision 1.1

1.1     ! bertrand    1:       SUBROUTINE ZUPGTR( UPLO, N, AP, TAU, Q, LDQ, WORK, INFO )
        !             2: *
        !             3: *  -- LAPACK routine (version 3.2) --
        !             4: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
        !             5: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
        !             6: *     November 2006
        !             7: *
        !             8: *     .. Scalar Arguments ..
        !             9:       CHARACTER          UPLO
        !            10:       INTEGER            INFO, LDQ, N
        !            11: *     ..
        !            12: *     .. Array Arguments ..
        !            13:       COMPLEX*16         AP( * ), Q( LDQ, * ), TAU( * ), WORK( * )
        !            14: *     ..
        !            15: *
        !            16: *  Purpose
        !            17: *  =======
        !            18: *
        !            19: *  ZUPGTR generates a complex unitary matrix Q which is defined as the
        !            20: *  product of n-1 elementary reflectors H(i) of order n, as returned by
        !            21: *  ZHPTRD using packed storage:
        !            22: *
        !            23: *  if UPLO = 'U', Q = H(n-1) . . . H(2) H(1),
        !            24: *
        !            25: *  if UPLO = 'L', Q = H(1) H(2) . . . H(n-1).
        !            26: *
        !            27: *  Arguments
        !            28: *  =========
        !            29: *
        !            30: *  UPLO    (input) CHARACTER*1
        !            31: *          = 'U': Upper triangular packed storage used in previous
        !            32: *                 call to ZHPTRD;
        !            33: *          = 'L': Lower triangular packed storage used in previous
        !            34: *                 call to ZHPTRD.
        !            35: *
        !            36: *  N       (input) INTEGER
        !            37: *          The order of the matrix Q. N >= 0.
        !            38: *
        !            39: *  AP      (input) COMPLEX*16 array, dimension (N*(N+1)/2)
        !            40: *          The vectors which define the elementary reflectors, as
        !            41: *          returned by ZHPTRD.
        !            42: *
        !            43: *  TAU     (input) COMPLEX*16 array, dimension (N-1)
        !            44: *          TAU(i) must contain the scalar factor of the elementary
        !            45: *          reflector H(i), as returned by ZHPTRD.
        !            46: *
        !            47: *  Q       (output) COMPLEX*16 array, dimension (LDQ,N)
        !            48: *          The N-by-N unitary matrix Q.
        !            49: *
        !            50: *  LDQ     (input) INTEGER
        !            51: *          The leading dimension of the array Q. LDQ >= max(1,N).
        !            52: *
        !            53: *  WORK    (workspace) COMPLEX*16 array, dimension (N-1)
        !            54: *
        !            55: *  INFO    (output) INTEGER
        !            56: *          = 0:  successful exit
        !            57: *          < 0:  if INFO = -i, the i-th argument had an illegal value
        !            58: *
        !            59: *  =====================================================================
        !            60: *
        !            61: *     .. Parameters ..
        !            62:       COMPLEX*16         CZERO, CONE
        !            63:       PARAMETER          ( CZERO = ( 0.0D+0, 0.0D+0 ),
        !            64:      $                   CONE = ( 1.0D+0, 0.0D+0 ) )
        !            65: *     ..
        !            66: *     .. Local Scalars ..
        !            67:       LOGICAL            UPPER
        !            68:       INTEGER            I, IINFO, IJ, J
        !            69: *     ..
        !            70: *     .. External Functions ..
        !            71:       LOGICAL            LSAME
        !            72:       EXTERNAL           LSAME
        !            73: *     ..
        !            74: *     .. External Subroutines ..
        !            75:       EXTERNAL           XERBLA, ZUNG2L, ZUNG2R
        !            76: *     ..
        !            77: *     .. Intrinsic Functions ..
        !            78:       INTRINSIC          MAX
        !            79: *     ..
        !            80: *     .. Executable Statements ..
        !            81: *
        !            82: *     Test the input arguments
        !            83: *
        !            84:       INFO = 0
        !            85:       UPPER = LSAME( UPLO, 'U' )
        !            86:       IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
        !            87:          INFO = -1
        !            88:       ELSE IF( N.LT.0 ) THEN
        !            89:          INFO = -2
        !            90:       ELSE IF( LDQ.LT.MAX( 1, N ) ) THEN
        !            91:          INFO = -6
        !            92:       END IF
        !            93:       IF( INFO.NE.0 ) THEN
        !            94:          CALL XERBLA( 'ZUPGTR', -INFO )
        !            95:          RETURN
        !            96:       END IF
        !            97: *
        !            98: *     Quick return if possible
        !            99: *
        !           100:       IF( N.EQ.0 )
        !           101:      $   RETURN
        !           102: *
        !           103:       IF( UPPER ) THEN
        !           104: *
        !           105: *        Q was determined by a call to ZHPTRD with UPLO = 'U'
        !           106: *
        !           107: *        Unpack the vectors which define the elementary reflectors and
        !           108: *        set the last row and column of Q equal to those of the unit
        !           109: *        matrix
        !           110: *
        !           111:          IJ = 2
        !           112:          DO 20 J = 1, N - 1
        !           113:             DO 10 I = 1, J - 1
        !           114:                Q( I, J ) = AP( IJ )
        !           115:                IJ = IJ + 1
        !           116:    10       CONTINUE
        !           117:             IJ = IJ + 2
        !           118:             Q( N, J ) = CZERO
        !           119:    20    CONTINUE
        !           120:          DO 30 I = 1, N - 1
        !           121:             Q( I, N ) = CZERO
        !           122:    30    CONTINUE
        !           123:          Q( N, N ) = CONE
        !           124: *
        !           125: *        Generate Q(1:n-1,1:n-1)
        !           126: *
        !           127:          CALL ZUNG2L( N-1, N-1, N-1, Q, LDQ, TAU, WORK, IINFO )
        !           128: *
        !           129:       ELSE
        !           130: *
        !           131: *        Q was determined by a call to ZHPTRD with UPLO = 'L'.
        !           132: *
        !           133: *        Unpack the vectors which define the elementary reflectors and
        !           134: *        set the first row and column of Q equal to those of the unit
        !           135: *        matrix
        !           136: *
        !           137:          Q( 1, 1 ) = CONE
        !           138:          DO 40 I = 2, N
        !           139:             Q( I, 1 ) = CZERO
        !           140:    40    CONTINUE
        !           141:          IJ = 3
        !           142:          DO 60 J = 2, N
        !           143:             Q( 1, J ) = CZERO
        !           144:             DO 50 I = J + 1, N
        !           145:                Q( I, J ) = AP( IJ )
        !           146:                IJ = IJ + 1
        !           147:    50       CONTINUE
        !           148:             IJ = IJ + 2
        !           149:    60    CONTINUE
        !           150:          IF( N.GT.1 ) THEN
        !           151: *
        !           152: *           Generate Q(2:n,2:n)
        !           153: *
        !           154:             CALL ZUNG2R( N-1, N-1, N-1, Q( 2, 2 ), LDQ, TAU, WORK,
        !           155:      $                   IINFO )
        !           156:          END IF
        !           157:       END IF
        !           158:       RETURN
        !           159: *
        !           160: *     End of ZUPGTR
        !           161: *
        !           162:       END

CVSweb interface <joel.bertrand@systella.fr>