133 SUBROUTINE dlqt02( M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK,
141 INTEGER K, LDA, LWORK, M, N
144 DOUBLE PRECISION A( LDA, * ), AF( LDA, * ), L( LDA, * ),
145 $ q( lda, * ), result( * ), rwork( * ), tau( * ),
152 DOUBLE PRECISION ZERO, ONE
153 parameter( zero = 0.0d+0, one = 1.0d+0 )
154 DOUBLE PRECISION ROGUE
155 parameter( rogue = -1.0d+10 )
159 DOUBLE PRECISION ANORM, EPS, RESID
162 DOUBLE PRECISION DLAMCH, DLANGE, DLANSY
163 EXTERNAL dlamch, dlange, dlansy
175 COMMON / srnamc / srnamt
179 eps = dlamch(
'Epsilon' )
183 CALL dlaset(
'Full', m, n, rogue, rogue, q, lda )
184 CALL dlacpy(
'Upper', k, n-1, af( 1, 2 ), lda, q( 1, 2 ), lda )
189 CALL dorglq( m, n, k, q, lda, tau, work, lwork, info )
193 CALL dlaset(
'Full', k, m, zero, zero, l, lda )
194 CALL dlacpy(
'Lower', k, m, af, lda, l, lda )
198 CALL dgemm(
'No transpose',
'Transpose', k, m, n, -one, a, lda, q,
203 anorm = dlange(
'1', k, n, a, lda, rwork )
204 resid = dlange(
'1', k, m, l, lda, rwork )
205 IF( anorm.GT.zero )
THEN
206 result( 1 ) = ( ( resid / dble( max( 1, n ) ) ) / anorm ) / eps
213 CALL dlaset(
'Full', m, m, zero, one, l, lda )
214 CALL dsyrk(
'Upper',
'No transpose', m, n, -one, q, lda, one, l,
219 resid = dlansy(
'1',
'Upper', m, l, lda, rwork )
221 result( 2 ) = ( resid / dble( max( 1, n ) ) ) / eps
subroutine dlqt02(m, n, k, a, af, q, l, lda, tau, work, lwork, rwork, result)
DLQT02
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine dsyrk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
DSYRK
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
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 dorglq(m, n, k, a, lda, tau, work, lwork, info)
DORGLQ