136 SUBROUTINE cqrt03( M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK,
145 INTEGER K, LDA, LWORK, M, N
148 REAL RESULT( * ), RWORK( * )
149 COMPLEX AF( LDA, * ), C( LDA, * ), CC( LDA, * ),
150 $ q( lda, * ), tau( * ), work( lwork )
157 parameter( zero = 0.0e+0, one = 1.0e+0 )
159 parameter( rogue = ( -1.0e+10, -1.0e+10 ) )
162 CHARACTER SIDE, TRANS
163 INTEGER INFO, ISIDE, ITRANS, J, MC, NC
164 REAL CNORM, EPS, RESID
169 EXTERNAL lsame, clange, slamch
178 INTRINSIC cmplx, max, real
184 COMMON / srnamc / srnamt
187 DATA iseed / 1988, 1989, 1990, 1991 /
191 eps = slamch(
'Epsilon' )
195 CALL claset(
'Full', m, m, rogue, rogue, q, lda )
196 CALL clacpy(
'Lower', m-1, k, af( 2, 1 ), lda, q( 2, 1 ), lda )
201 CALL cungqr( m, m, k, q, lda, tau, work, lwork, info )
204 IF( iside.EQ.1 )
THEN
217 CALL clarnv( 2, iseed, mc, c( 1, j ) )
219 cnorm = clange(
'1', mc, nc, c, lda, rwork )
224 IF( itrans.EQ.1 )
THEN
232 CALL clacpy(
'Full', mc, nc, c, lda, cc, lda )
237 CALL cunmqr( side, trans, mc, nc, k, af, lda, tau, cc, lda,
238 $ work, lwork, info )
242 IF( lsame( side,
'L' ) )
THEN
243 CALL cgemm( trans,
'No transpose', mc, nc, mc,
244 $ cmplx( -one ), q, lda, c, lda, cmplx( one ),
247 CALL cgemm(
'No transpose', trans, mc, nc, nc,
248 $ cmplx( -one ), c, lda, q, lda, cmplx( one ),
254 resid = clange(
'1', mc, nc, cc, lda, rwork )
255 result( ( iside-1 )*2+itrans ) = resid /
256 $ ( real( max( 1, m ) )*cnorm*eps )