124 SUBROUTINE zrqt01( M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK,
132 INTEGER LDA, LWORK, M, N
135 DOUBLE PRECISION RESULT( * ), RWORK( * )
136 COMPLEX*16 A( LDA, * ), AF( LDA, * ), Q( LDA, * ),
137 $ r( lda, * ), tau( * ), work( lwork )
143 DOUBLE PRECISION ZERO, ONE
144 parameter( zero = 0.0d+0, one = 1.0d+0 )
146 parameter( rogue = ( -1.0d+10, -1.0d+10 ) )
150 DOUBLE PRECISION ANORM, EPS, RESID
153 DOUBLE PRECISION DLAMCH, ZLANGE, ZLANSY
154 EXTERNAL dlamch, zlange, zlansy
160 INTRINSIC dble, dcmplx,
max,
min
166 COMMON / srnamc / srnamt
171 eps = dlamch(
'Epsilon' )
175 CALL zlacpy(
'Full', m, n, a, lda, af, lda )
180 CALL zgerqf( m, n, af, lda, tau, work, lwork, info )
184 CALL zlaset(
'Full', n, n, rogue, rogue, q, lda )
186 IF( m.GT.0 .AND. m.LT.n )
187 $
CALL zlacpy(
'Full', m, n-m, af, lda, q( n-m+1, 1 ), lda )
189 $
CALL zlacpy(
'Lower', m-1, m-1, af( 2, n-m+1 ), lda,
190 $ q( n-m+2, n-m+1 ), lda )
193 $
CALL zlacpy(
'Lower', n-1, n-1, af( m-n+2, 1 ), lda,
200 CALL zungrq( n, n, minmn, q, lda, tau, work, lwork, info )
204 CALL zlaset(
'Full', m, n, dcmplx( zero ), dcmplx( zero ), r,
208 $
CALL zlacpy(
'Upper', m, m, af( 1, n-m+1 ), lda,
209 $ r( 1, n-m+1 ), lda )
211 IF( m.GT.n .AND. n.GT.0 )
212 $
CALL zlacpy(
'Full', m-n, n, af, lda, r, lda )
214 $
CALL zlacpy(
'Upper', n, n, af( m-n+1, 1 ), lda,
215 $ r( m-n+1, 1 ), lda )
220 CALL zgemm(
'No transpose',
'Conjugate transpose', m, n, n,
221 $ dcmplx( -one ), a, lda, q, lda, dcmplx( one ), r,
226 anorm = zlange( '1
', M, N, A, LDA, RWORK )
227 RESID = ZLANGE( '1
', M, N, R, LDA, RWORK )
228.GT.
IF( ANORMZERO ) THEN
229 RESULT( 1 ) = ( ( RESID / DBLE( MAX( 1, N ) ) ) / ANORM ) / EPS
236 CALL ZLASET( 'full
', N, N, DCMPLX( ZERO ), DCMPLX( ONE ), R, LDA )
237 CALL ZHERK( 'upper
', 'no transpose
', N, N, -ONE, Q, LDA, ONE, R,
242 RESID = ZLANSY( '1
', 'upper
', N, R, LDA, RWORK )
244 RESULT( 2 ) = ( RESID / DBLE( MAX( 1, N ) ) ) / EPS
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zrqt01(m, n, a, af, q, r, lda, tau, work, lwork, rwork, result)
ZRQT01