001:       SUBROUTINE ZTPTTR( UPLO, N, AP, A, LDA, INFO )
002: *
003: *  -- LAPACK routine (version 3.2)                                    --
004: *
005: *  -- Contributed by Julien Langou of the Univ. of Colorado Denver    --
006: *  -- November 2008                                                   --
007: *
008: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
009: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
010: *
011: *     .. Scalar Arguments ..
012:       CHARACTER          UPLO
013:       INTEGER            INFO, N, LDA
014: *     ..
015: *     .. Array Arguments ..
016:       COMPLEX*16         A( LDA, * ), AP( * )
017: *     ..
018: *
019: *  Purpose
020: *  =======
021: *
022: *  ZTPTTR copies a triangular matrix A from standard packed format (TP)
023: *  to standard full format (TR).
024: *
025: *  Arguments
026: *  =========
027: *
028: *  UPLO    (input) CHARACTER
029: *          = 'U':  A is upper triangular.
030: *          = 'L':  A is lower triangular.
031: *
032: *  N       (input) INTEGER
033: *          The order of the matrix A. N >= 0.
034: *
035: *  AP      (input) COMPLEX*16 array, dimension ( N*(N+1)/2 ),
036: *          On entry, the upper or lower triangular matrix A, packed
037: *          columnwise in a linear array. The j-th column of A is stored
038: *          in the array AP as follows:
039: *          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
040: *          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
041: *
042: *  A       (output) COMPLEX*16 array, dimension ( LDA, N )
043: *          On exit, the triangular matrix A.  If UPLO = 'U', the leading
044: *          N-by-N upper triangular part of A contains the upper
045: *          triangular part of the matrix A, and the strictly lower
046: *          triangular part of A is not referenced.  If UPLO = 'L', the
047: *          leading N-by-N lower triangular part of A contains the lower
048: *          triangular part of the matrix A, and the strictly upper
049: *          triangular part of A is not referenced.
050: *
051: *  LDA     (input) INTEGER
052: *          The leading dimension of the array A.  LDA >= max(1,N).
053: *
054: *  INFO    (output) INTEGER
055: *          = 0:  successful exit
056: *          < 0:  if INFO = -i, the i-th argument had an illegal value
057: *
058: *  =====================================================================
059: *
060: *     .. Parameters ..
061: *     ..
062: *     .. Local Scalars ..
063:       LOGICAL            LOWER
064:       INTEGER            I, J, K
065: *     ..
066: *     .. External Functions ..
067:       LOGICAL            LSAME
068:       EXTERNAL           LSAME
069: *     ..
070: *     .. External Subroutines ..
071:       EXTERNAL           XERBLA
072: *     ..
073: *     .. Executable Statements ..
074: *
075: *     Test the input parameters.
076: *
077:       INFO = 0
078:       LOWER = LSAME( UPLO, 'L' )
079:       IF( .NOT.LOWER .AND. .NOT.LSAME( UPLO, 'U' ) ) THEN
080:          INFO = -1
081:       ELSE IF( N.LT.0 ) THEN
082:          INFO = -2
083:       ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
084:          INFO = -5
085:       END IF
086:       IF( INFO.NE.0 ) THEN
087:          CALL XERBLA( 'ZTPTTR', -INFO )
088:          RETURN
089:       END IF
090: *
091:       IF( LOWER ) THEN
092:          K = 0
093:          DO J = 1, N
094:             DO I = J, N
095:                K = K + 1
096:                A( I, J ) = AP( K )
097:             END DO
098:          END DO
099:       ELSE
100:          K = 0
101:          DO J = 1, N
102:             DO I = 1, J
103:                K = K + 1
104:                A( I, J ) = AP( K )
105:             END DO
106:          END DO
107:       END IF
108: *
109: *
110:       RETURN
111: *
112: *     End of ZTPTTR
113: *
114:       END
115: