120 SUBROUTINE dgerqs( M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK,
128 INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS
131 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), TAU( * ),
138 DOUBLE PRECISION ZERO, ONE
139 parameter( zero = 0.0d+0, one = 1.0d+0 )
154 ELSE IF( n.LT.0 .OR. m.GT.n )
THEN
156 ELSE IF( nrhs.LT.0 )
THEN
158 ELSE IF( lda.LT.max( 1, m ) )
THEN
160 ELSE IF( ldb.LT.max( 1, n ) )
THEN
162 ELSE IF( lwork.LT.1 .OR. lwork.LT.nrhs .AND. m.GT.0 .AND. n.GT.0 )
167 CALL xerbla(
'DGERQS', -info )
173 IF( n.EQ.0 .OR. nrhs.EQ.0 .OR. m.EQ.0 )
178 CALL dtrsm(
'Left',
'Upper',
'No transpose',
'Non-unit', m, nrhs,
179 $ one, a( 1, n-m+1 ), lda, b( n-m+1, 1 ), ldb )
183 CALL dlaset(
'Full', n-m, nrhs, zero, zero, b, ldb )
187 CALL dormrq(
'Left',
'Transpose', n, nrhs, m, a, lda, tau, b, ldb,
188 $ work, lwork, info )
subroutine dlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dgerqs(M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
DGERQS
subroutine dormrq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMRQ