001:       SUBROUTINE ZLAT2C( UPLO, N, A, LDA, SA, LDSA, INFO )
002: *
003: *  -- LAPACK PROTOTYPE auxiliary routine (version 3.1.2) --
004: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
005: *     May 2007
006: *
007: *     .. Scalar Arguments ..
008:       CHARACTER          UPLO
009:       INTEGER            INFO, LDA, LDSA, N
010: *     ..
011: *     .. Array Arguments ..
012:       COMPLEX            SA( LDSA, * )
013:       COMPLEX*16         A( LDA, * )
014: *     ..
015: *
016: *  Purpose
017: *  =======
018: *
019: *  ZLAT2C converts a COMPLEX*16 triangular matrix, SA, to a COMPLEX
020: *  triangular matrix, A.
021: *
022: *  RMAX is the overflow for the SINGLE PRECISION arithmetic
023: *  ZLAT2C checks that all the entries of A are between -RMAX and
024: *  RMAX. If not the convertion is aborted and a flag is raised.
025: *
026: *  This is an auxiliary routine so there is no argument checking.
027: *
028: *  Arguments
029: *  =========
030: *
031: *  UPLO    (input) CHARACTER*1
032: *          = 'U':  A is upper triangular;
033: *          = 'L':  A is lower triangular.
034: *
035: *  N       (input) INTEGER
036: *          The number of rows and columns of the matrix A.  N >= 0.
037: *
038: *  A       (input) COMPLEX*16 array, dimension (LDA,N)
039: *          On entry, the N-by-N triangular coefficient matrix A.
040: *
041: *  LDA     (input) INTEGER
042: *          The leading dimension of the array A.  LDA >= max(1,N).
043: *
044: *  SA      (output) COMPLEX array, dimension (LDSA,N)
045: *          Only the UPLO part of SA is referenced.  On exit, if INFO=0,
046: *          the N-by-N coefficient matrix SA; if INFO>0, the content of
047: *          the UPLO part of SA is unspecified.
048: *
049: *  LDSA    (input) INTEGER
050: *          The leading dimension of the array SA.  LDSA >= max(1,M).
051: *
052: *  INFO    (output) INTEGER
053: *          = 0:  successful exit.
054: *          = 1:  an entry of the matrix A is greater than the SINGLE
055: *                PRECISION overflow threshold, in this case, the content
056: *                of the UPLO part of SA in exit is unspecified.
057: *
058: *  =========
059: *
060: *     .. Local Scalars ..
061:       INTEGER            I, J
062:       DOUBLE PRECISION   RMAX
063:       LOGICAL            UPPER
064: *     ..
065: *     .. Intrinsic Functions ..
066:       INTRINSIC          DBLE, DIMAG
067: *     ..
068: *     .. External Functions ..
069:       REAL               SLAMCH
070:       LOGICAL            LSAME
071:       EXTERNAL           SLAMCH, LSAME
072: *     ..
073: *     .. Executable Statements ..
074: *
075:       RMAX = SLAMCH( 'O' )
076:       UPPER = LSAME( UPLO, 'U' )
077:       IF( UPPER ) THEN
078:          DO 20 J = 1, N
079:             DO 10 I = 1, J
080:                IF( ( DBLE( A( I, J ) ).LT.-RMAX ) .OR.
081:      +             ( DBLE( A( I, J ) ).GT.RMAX ) .OR.
082:      +             ( DIMAG( A( I, J ) ).LT.-RMAX ) .OR.
083:      +             ( DIMAG( A( I, J ) ).GT.RMAX ) ) THEN
084:                   INFO = 1
085:                   GO TO 50
086:                END IF
087:                SA( I, J ) = A( I, J )
088:    10       CONTINUE
089:    20    CONTINUE
090:       ELSE
091:          DO 40 J = 1, N
092:             DO 30 I = J, N
093:                IF( ( DBLE( A( I, J ) ).LT.-RMAX ) .OR.
094:      +             ( DBLE( A( I, J ) ).GT.RMAX ) .OR.
095:      +             ( DIMAG( A( I, J ) ).LT.-RMAX ) .OR.
096:      +             ( DIMAG( A( I, J ) ).GT.RMAX ) ) THEN
097:                   INFO = 1
098:                   GO TO 50
099:                END IF
100:                SA( I, J ) = A( I, J )
101:    30       CONTINUE
102:    40    CONTINUE
103:       END IF
104:    50 CONTINUE
105: *
106:       RETURN
107: *
108: *     End of ZLAT2C
109: *
110:       END
111: