1 SUBROUTINE clqt03( M, N, K, AF, C, CC, Q, LDA, T, WORK, LWORK,
11 INTEGER k, lda, lwork, m, n
15 REAL result( * ), rwork( * )
16 COMPLEX af( lda, * ), c( lda, * ), cc( lda, * ),
17 $ q( lda, * ), work( lwork )
81 parameter( zero = 0.0e+0, one = 1.0e+0 )
83 parameter( rogue = ( -1.0e+10, -1.0e+10 ) )
87 INTEGER info, iside, itrans, j, mc, nc
88 INTEGER plasma_side, plasma_trans
89 REAL cnorm, eps, resid
94 EXTERNAL lsame, clange, slamch
97 EXTERNAL cgemm, clacpy, clarnv,
claset, cunglq, cunmlq
103 INTRINSIC cmplx,
max, real
109 common / srnamc / srnamt
112 DATA iseed / 1988, 1989, 1990, 1991 /
116 eps = slamch(
'Epsilon' )
121 CALL
claset(
'Full', n, n, rogue, rogue, q, lda )
123 CALL
claset(
'Full', n, n, cmplx( zero ), cmplx( one ),
133 IF( iside.EQ.1 )
THEN
135 plasma_side = plasmaleft
140 plasma_side = plasmaright
148 CALL clarnv( 2, iseed, mc, c( 1, j ) )
150 cnorm = clange(
'1', mc, nc, c, lda, rwork )
157 IF( itrans.EQ.1 )
THEN
159 plasma_trans = plasmanotrans
162 plasma_trans = plasmaconjtrans
167 CALL clacpy(
'Full', mc, nc, c, lda, cc, lda )
173 $ af, lda, t, cc, lda, info )
178 CALL
claset(
'Full', n, n, cmplx( zero ),
179 $ cmplx( one ), q, lda )
181 IF( lsame(
side,
'L' ) )
THEN
182 CALL cgemm(
trans,
'No transpose', mc, nc, mc,
183 $ cmplx( -one ), q, lda, c, lda, cmplx( one ),
186 CALL cgemm(
'No transpose',
trans, mc, nc, nc,
187 $ cmplx( -one ), c, lda, q, lda, cmplx( one ),
193 resid = clange(
'1', mc, nc, cc, lda, rwork )
194 result( ( iside-1 )*2+itrans ) = resid /
195 $ (
REAL( MAX( 1, N ) )*cnorm*eps )