LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ cungtr()

subroutine cungtr ( character  uplo,
integer  n,
complex, dimension( lda, * )  a,
integer  lda,
complex, dimension( * )  tau,
complex, dimension( * )  work,
integer  lwork,
integer  info 
)

CUNGTR

Download CUNGTR + dependencies [TGZ] [ZIP] [TXT]

Purpose:
 CUNGTR generates a complex unitary matrix Q which is defined as the
 product of n-1 elementary reflectors of order N, as returned by
 CHETRD:

 if UPLO = 'U', Q = H(n-1) . . . H(2) H(1),

 if UPLO = 'L', Q = H(1) H(2) . . . H(n-1).
Parameters
[in]UPLO
          UPLO is CHARACTER*1
          = 'U': Upper triangle of A contains elementary reflectors
                 from CHETRD;
          = 'L': Lower triangle of A contains elementary reflectors
                 from CHETRD.
[in]N
          N is INTEGER
          The order of the matrix Q. N >= 0.
[in,out]A
          A is COMPLEX array, dimension (LDA,N)
          On entry, the vectors which define the elementary reflectors,
          as returned by CHETRD.
          On exit, the N-by-N unitary matrix Q.
[in]LDA
          LDA is INTEGER
          The leading dimension of the array A. LDA >= N.
[in]TAU
          TAU is COMPLEX array, dimension (N-1)
          TAU(i) must contain the scalar factor of the elementary
          reflector H(i), as returned by CHETRD.
[out]WORK
          WORK is COMPLEX array, dimension (MAX(1,LWORK))
          On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
[in]LWORK
          LWORK is INTEGER
          The dimension of the array WORK. LWORK >= N-1.
          For optimum performance LWORK >= (N-1)*NB, where NB is
          the optimal blocksize.

          If LWORK = -1, then a workspace query is assumed; the routine
          only calculates the optimal size of the WORK array, returns
          this value as the first entry of the WORK array, and no error
          message related to LWORK is issued by XERBLA.
[out]INFO
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -i, the i-th argument had an illegal value
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 122 of file cungtr.f.

123*
124* -- LAPACK computational routine --
125* -- LAPACK is a software package provided by Univ. of Tennessee, --
126* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
127*
128* .. Scalar Arguments ..
129 CHARACTER UPLO
130 INTEGER INFO, LDA, LWORK, N
131* ..
132* .. Array Arguments ..
133 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
134* ..
135*
136* =====================================================================
137*
138* .. Parameters ..
139 COMPLEX ZERO, ONE
140 parameter( zero = ( 0.0e+0, 0.0e+0 ),
141 $ one = ( 1.0e+0, 0.0e+0 ) )
142* ..
143* .. Local Scalars ..
144 LOGICAL LQUERY, UPPER
145 INTEGER I, IINFO, J, LWKOPT, NB
146* ..
147* .. External Functions ..
148 LOGICAL LSAME
149 INTEGER ILAENV
150 REAL SROUNDUP_LWORK
151 EXTERNAL ilaenv, lsame, sroundup_lwork
152* ..
153* .. External Subroutines ..
154 EXTERNAL cungql, cungqr, xerbla
155* ..
156* .. Intrinsic Functions ..
157 INTRINSIC max
158* ..
159* .. Executable Statements ..
160*
161* Test the input arguments
162*
163 info = 0
164 lquery = ( lwork.EQ.-1 )
165 upper = lsame( uplo, 'U' )
166 IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
167 info = -1
168 ELSE IF( n.LT.0 ) THEN
169 info = -2
170 ELSE IF( lda.LT.max( 1, n ) ) THEN
171 info = -4
172 ELSE IF( lwork.LT.max( 1, n-1 ) .AND. .NOT.lquery ) THEN
173 info = -7
174 END IF
175*
176 IF( info.EQ.0 ) THEN
177 IF ( upper ) THEN
178 nb = ilaenv( 1, 'CUNGQL', ' ', n-1, n-1, n-1, -1 )
179 ELSE
180 nb = ilaenv( 1, 'CUNGQR', ' ', n-1, n-1, n-1, -1 )
181 END IF
182 lwkopt = max( 1, n-1 )*nb
183 work( 1 ) = sroundup_lwork(lwkopt)
184 END IF
185*
186 IF( info.NE.0 ) THEN
187 CALL xerbla( 'CUNGTR', -info )
188 RETURN
189 ELSE IF( lquery ) THEN
190 RETURN
191 END IF
192*
193* Quick return if possible
194*
195 IF( n.EQ.0 ) THEN
196 work( 1 ) = 1
197 RETURN
198 END IF
199*
200 IF( upper ) THEN
201*
202* Q was determined by a call to CHETRD with UPLO = 'U'
203*
204* Shift the vectors which define the elementary reflectors one
205* column to the left, and set the last row and column of Q to
206* those of the unit matrix
207*
208 DO 20 j = 1, n - 1
209 DO 10 i = 1, j - 1
210 a( i, j ) = a( i, j+1 )
211 10 CONTINUE
212 a( n, j ) = zero
213 20 CONTINUE
214 DO 30 i = 1, n - 1
215 a( i, n ) = zero
216 30 CONTINUE
217 a( n, n ) = one
218*
219* Generate Q(1:n-1,1:n-1)
220*
221 CALL cungql( n-1, n-1, n-1, a, lda, tau, work, lwork, iinfo )
222*
223 ELSE
224*
225* Q was determined by a call to CHETRD with UPLO = 'L'.
226*
227* Shift the vectors which define the elementary reflectors one
228* column to the right, and set the first row and column of Q to
229* those of the unit matrix
230*
231 DO 50 j = n, 2, -1
232 a( 1, j ) = zero
233 DO 40 i = j + 1, n
234 a( i, j ) = a( i, j-1 )
235 40 CONTINUE
236 50 CONTINUE
237 a( 1, 1 ) = one
238 DO 60 i = 2, n
239 a( i, 1 ) = zero
240 60 CONTINUE
241 IF( n.GT.1 ) THEN
242*
243* Generate Q(2:n,2:n)
244*
245 CALL cungqr( n-1, n-1, n-1, a( 2, 2 ), lda, tau, work,
246 $ lwork, iinfo )
247 END IF
248 END IF
249 work( 1 ) = sroundup_lwork(lwkopt)
250 RETURN
251*
252* End of CUNGTR
253*
subroutine xerbla(srname, info)
Definition cblat2.f:3285
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV
Definition ilaenv.f:162
logical function lsame(ca, cb)
LSAME
Definition lsame.f:48
real function sroundup_lwork(lwork)
SROUNDUP_LWORK
subroutine cungql(m, n, k, a, lda, tau, work, lwork, info)
CUNGQL
Definition cungql.f:128
subroutine cungqr(m, n, k, a, lda, tau, work, lwork, info)
CUNGQR
Definition cungqr.f:128
Here is the call graph for this function:
Here is the caller graph for this function: