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