124 SUBROUTINE srqt01( M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK,
132 INTEGER LDA, LWORK, M, N
135 REAL A( LDA, * ), AF( LDA, * ), Q( LDA, * ),
136 $ r( lda, * ), result( * ), rwork( * ), tau( * ),
144 parameter( zero = 0.0e+0, one = 1.0e+0 )
146 parameter( rogue = -1.0e+10 )
150 REAL ANORM, EPS, RESID
153 REAL SLAMCH, SLANGE, SLANSY
154 EXTERNAL slamch, slange, slansy
160 INTRINSIC max, min, real
166 COMMON / srnamc / srnamt
171 eps = slamch(
'Epsilon' )
175 CALL slacpy(
'Full', m, n, a, lda, af, lda )
180 CALL sgerqf( m, n, af, lda, tau, work, lwork, info )
184 CALL slaset(
'Full', n, n, rogue, rogue, q, lda )
186 IF( m.GT.0 .AND. m.LT.n )
187 $
CALL slacpy(
'Full', m, n-m, af, lda, q( n-m+1, 1 ), lda )
189 $
CALL slacpy(
'Lower', m-1, m-1, af( 2, n-m+1 ), lda,
190 $ q( n-m+2, n-m+1 ), lda )
193 $
CALL slacpy(
'Lower', n-1, n-1, af( m-n+2, 1 ), lda,
200 CALL sorgrq( n, n, minmn, q, lda, tau, work, lwork, info )
204 CALL slaset(
'Full', m, n, zero, zero, r, lda )
207 $
CALL slacpy(
'Upper', m, m, af( 1, n-m+1 ), lda,
208 $ r( 1, n-m+1 ), lda )
210 IF( m.GT.n .AND. n.GT.0 )
211 $
CALL slacpy(
'Full', m-n, n, af, lda, r, lda )
213 $
CALL slacpy(
'Upper', n, n, af( m-n+1, 1 ), lda,
214 $ r( m-n+1, 1 ), lda )
219 CALL sgemm(
'No transpose',
'Transpose', m, n, n, -one, a, lda, q,
224 anorm = slange(
'1', m, n, a, lda, rwork )
225 resid = slange(
'1', m, n, r, lda, rwork )
226 IF( anorm.GT.zero )
THEN
227 result( 1 ) = ( ( resid / real( max( 1, n ) ) ) / anorm ) / eps
234 CALL slaset(
'Full', n, n, zero, one, r, lda )
235 CALL ssyrk(
'Upper',
'No transpose', n, n, -one, q, lda, one, r,
240 resid = slansy(
'1',
'Upper', n, r, lda, rwork )
242 result( 2 ) = ( resid / real( max( 1, n ) ) ) / eps
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine sgerqf(m, n, a, lda, tau, work, lwork, info)
SGERQF
subroutine ssyrk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
SSYRK
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine sorgrq(m, n, k, a, lda, tau, work, lwork, info)
SORGRQ
subroutine srqt01(m, n, a, af, q, r, lda, tau, work, lwork, rwork, result)
SRQT01