173 SUBROUTINE zungtsqr( M, N, MB, NB, A, LDA, T, LDT, WORK, LWORK,
182 INTEGER INFO, LDA, LDT, LWORK, M, N, MB, NB
185 COMPLEX*16 A( lda, * ), T( ldt, * ), WORK( * )
191 COMPLEX*16 CONE, CZERO
192 parameter( cone = ( 1.0d+0, 0.0d+0 ),
193 $ czero = ( 0.0d+0, 0.0d+0 ) )
197 INTEGER IINFO, LDC, LWORKOPT, LC, LW, NBLOCAL, J
203 INTRINSIC dcmplx, max, min
213 ELSE IF( n.LT.0 .OR. m.LT.n )
THEN 215 ELSE IF( mb.LE.n )
THEN 217 ELSE IF( nb.LT.1 )
THEN 219 ELSE IF( lda.LT.max( 1, m ) )
THEN 221 ELSE IF( ldt.LT.max( 1, min( nb, n ) ) )
THEN 229 IF( lwork.LT.2 .AND. (.NOT.lquery) )
THEN 235 nblocal = min( nb, n )
247 IF( ( lwork.LT.max( 1, lworkopt ) ).AND.(.NOT.lquery) )
THEN 257 CALL xerbla(
'ZUNGTSQR', -info )
259 ELSE IF ( lquery )
THEN 260 work( 1 ) = dcmplx( lworkopt )
266 IF( min( m, n ).EQ.0 )
THEN 267 work( 1 ) = dcmplx( lworkopt )
282 CALL zlaset(
'F', m, n, czero, cone, work, ldc )
289 CALL zlamtsqr(
'L',
'N', m, n, n, mb, nblocal, a, lda, t, ldt,
290 $ work, ldc, work( lc+1 ), lw, iinfo )
297 CALL zcopy( m, work( (j-1)*ldc + 1 ), 1, a( 1, j ), 1 )
300 work( 1 ) = dcmplx( lworkopt )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zungtsqr(M, N, MB, NB, A, LDA, T, LDT, WORK, LWORK, INFO)
ZUNGTSQR
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values...