170 SUBROUTINE dlatsqr( M, N, MB, NB, A, LDA, T, LDT, WORK,
178 INTEGER INFO, LDA, M, N, MB, NB, LDT, LWORK
181 DOUBLE PRECISION A( LDA, * ), WORK( * ), T( LDT, * )
189 INTEGER I, II, KK, CTR, MINMN, LWMIN
197 INTRINSIC max, min, mod
205 lquery = ( lwork.EQ.-1 )
208 IF( minmn.EQ.0 )
THEN
216 ELSE IF( n.LT.0 .OR. m.LT.n )
THEN
218 ELSE IF( mb.LT.1 )
THEN
220 ELSE IF( nb.LT.1 .OR. ( nb.GT.n .AND. n.GT.0 ) )
THEN
222 ELSE IF( lda.LT.max( 1, m ) )
THEN
224 ELSE IF( ldt.LT.nb )
THEN
226 ELSE IF( lwork.LT.lwmin .AND. (.NOT.lquery) )
THEN
235 CALL xerbla(
'DLATSQR', -info )
237 ELSE IF( lquery )
THEN
243 IF( minmn.EQ.0 )
THEN
249 IF( (mb.LE.n) .OR. (mb.GE.m) )
THEN
250 CALL dgeqrt( m, n, nb, a, lda, t, ldt, work, info )
254 kk = mod((m-n),(mb-n))
259 CALL dgeqrt( mb, n, nb, a(1,1), lda, t, ldt, work, info )
262 DO i = mb+1, ii-mb+n, (mb-n)
266 CALL dtpqrt( mb-n, n, 0, nb, a(1,1), lda, a( i, 1 ), lda,
275 CALL dtpqrt( kk, n, 0, nb, a(1,1), lda, a( ii, 1 ), lda,
276 $ t(1, ctr * n + 1), ldt,
subroutine dgeqrt(m, n, nb, a, lda, t, ldt, work, info)
DGEQRT
subroutine dlatsqr(m, n, mb, nb, a, lda, t, ldt, work, lwork, info)
DLATSQR
subroutine dtpqrt(m, n, l, nb, a, lda, b, ldb, t, ldt, work, info)
DTPQRT