214 SUBROUTINE dggrqf( M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK,
223 INTEGER info, lda, ldb, lwork, m, n, p
226 DOUBLE PRECISION a( lda, * ),
b( ldb, * ), taua( * ), taub( * ),
234 INTEGER lopt, lwkopt, nb, nb1, nb2, nb3
244 INTRINSIC int, max, min
251 nb1 =
ilaenv( 1,
'DGERQF',
' ', m, n, -1, -1 )
252 nb2 =
ilaenv( 1,
'DGEQRF',
' ', p, n, -1, -1 )
253 nb3 =
ilaenv( 1,
'DORMRQ',
' ', m, n, p, -1 )
254 nb = max( nb1, nb2, nb3 )
255 lwkopt = max( n, m, p )*nb
257 lquery = ( lwork.EQ.-1 )
260 ELSE IF( p.LT.0 )
THEN
262 ELSE IF( n.LT.0 )
THEN
264 ELSE IF( lda.LT.max( 1, m ) )
THEN
266 ELSE IF( ldb.LT.max( 1, p ) )
THEN
268 ELSE IF( lwork.LT.max( 1, m, p, n ) .AND. .NOT.lquery )
THEN
272 CALL
xerbla(
'DGGRQF', -info )
274 ELSE IF( lquery )
THEN
280 CALL
dgerqf( m, n, a, lda, taua, work, lwork, info )
285 CALL
dormrq(
'Right',
'Transpose', p, n, min( m, n ),
286 $ a( max( 1, m-n+1 ), 1 ), lda, taua,
b, ldb, work,
288 lopt = max( lopt, int( work( 1 ) ) )
292 CALL
dgeqrf( p, n,
b, ldb, taub, work, lwork, info )
293 work( 1 ) = max( lopt, int( work( 1 ) ) )
subroutine dormrq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
DORMRQ
subroutine dggrqf(M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK, LWORK, INFO)
DGGRQF
subroutine dgeqrf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
DGEQRF
subroutine xerbla(SRNAME, INFO)
XERBLA
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real b(3) integer i
subroutine dgerqf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
DGERQF
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)