174 SUBROUTINE dorgtsqr( M, N, MB, NB, A, LDA, T, LDT, WORK, LWORK,
184 INTEGER INFO, LDA, LDT, LWORK, M, N, MB, NB
187 DOUBLE PRECISION A( LDA, * ), T( LDT, * ), WORK( * )
193 DOUBLE PRECISION ONE, ZERO
194 parameter( one = 1.0d+0, zero = 0.0d+0 )
198 INTEGER IINFO, LDC, LWORKOPT, LC, LW, NBLOCAL, J
204 INTRINSIC dble, max, min
214 ELSE IF( n.LT.0 .OR. m.LT.n )
THEN
216 ELSE IF( mb.LE.n )
THEN
218 ELSE IF( nb.LT.1 )
THEN
220 ELSE IF( lda.LT.max( 1, m ) )
THEN
222 ELSE IF( ldt.LT.max( 1, min( nb, n ) ) )
THEN
230 IF( lwork.LT.2 .AND. (.NOT.lquery) )
THEN
236 nblocal = min( nb, n )
248 IF( ( lwork.LT.max( 1, lworkopt ) ).AND.(.NOT.lquery) )
THEN
258 CALL xerbla(
'DORGTSQR', -info )
260 ELSE IF ( lquery )
THEN
261 work( 1 ) = dble( lworkopt )
267 IF( min( m, n ).EQ.0 )
THEN
268 work( 1 ) = dble( lworkopt )
283 CALL dlaset(
'F', m, n, zero, one, work, ldc )
290 CALL dlamtsqr(
'L',
'N', m, n, n, mb, nblocal, a, lda, t, ldt,
291 $ work, ldc, work( lc+1 ), lw, iinfo )
298 CALL dcopy( m, work( (j-1)*ldc + 1 ), 1, a( 1, j ), 1 )
301 work( 1 ) = dble( lworkopt )