134 SUBROUTINE cqlt03( M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK,
142 INTEGER K, LDA, LWORK, M, N
145 REAL RESULT( * ), RWORK( * )
146 COMPLEX AF( LDA, * ), C( LDA, * ), CC( LDA, * ),
147 $ q( lda, * ), tau( * ), work( lwork )
154 parameter( zero = 0.0e+0, one = 1.0e+0 )
156 parameter( rogue = ( -1.0e+10, -1.0e+10 ) )
159 CHARACTER SIDE, TRANS
160 INTEGER INFO, ISIDE, ITRANS, J, MC, MINMN, NC
161 REAL CNORM, EPS, RESID
166 EXTERNAL lsame, clange, slamch
175 INTRINSIC cmplx, max, min, real
181 COMMON / srnamc / srnamt
184 DATA iseed / 1988, 1989, 1990, 1991 /
188 eps = slamch(
'Epsilon' )
193 IF( minmn.EQ.0 )
THEN
203 CALL claset(
'Full', m, m, rogue, rogue, q, lda )
204 IF( k.GT.0 .AND. m.GT.k )
205 $
CALL clacpy(
'Full', m-k, k, af( 1, n-k+1 ), lda,
206 $ q( 1, m-k+1 ), lda )
208 $
CALL clacpy(
'Upper', k-1, k-1, af( m-k+1, n-k+2 ), lda,
209 $ q( m-k+1, m-k+2 ), lda )
214 CALL cungql( m, m, k, q, lda, tau( minmn-k+1 ), work, lwork,
218 IF( iside.EQ.1 )
THEN
231 CALL clarnv( 2, iseed, mc, c( 1, j ) )
233 cnorm = clange(
'1', mc, nc, c, lda, rwork )
238 IF( itrans.EQ.1 )
THEN
246 CALL clacpy(
'Full', mc, nc, c, lda, cc, lda )
252 $
CALL cunmql( side, trans, mc, nc, k, af( 1, n-k+1 ),
253 $ lda, tau( minmn-k+1 ), cc, lda, work,
258 IF( lsame( side,
'L' ) )
THEN
259 CALL cgemm( trans,
'No transpose', mc, nc, mc,
260 $ cmplx( -one ), q, lda, c, lda, cmplx( one ),
263 CALL cgemm(
'No transpose', trans, mc, nc, nc,
264 $ cmplx( -one ), c, lda, q, lda, cmplx( one ),
270 resid = clange(
'1', mc, nc, cc, lda, rwork )
271 result( ( iside-1 )*2+itrans ) = resid /
272 $ ( real( max( 1, m ) )*cnorm*eps )
subroutine cqlt03(m, n, k, af, c, cc, q, lda, tau, work, lwork, rwork, result)
CQLT03
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine clarnv(idist, iseed, n, x)
CLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine cungql(m, n, k, a, lda, tau, work, lwork, info)
CUNGQL
subroutine cunmql(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
CUNMQL