87 INTEGER LWORK, M, N, L, NB, LDT
95 REAL,
ALLOCATABLE :: AF(:,:), Q(:,:),
96 $ R(:,:), RWORK(:), WORK( : ), T(:,:),
97 $ CF(:,:), DF(:,:), A(:,:), C(:,:), D(:,:)
101 parameter( zero = 0.0, one = 1.0 )
104 INTEGER INFO, J, K, M2, NP1
105 REAL ANORM, EPS, RESID, CNORM, DNORM
118 EXTERNAL slamch, slange, slansy, lsame
121 DATA iseed / 1988, 1989, 1990, 1991 /
123 eps = slamch(
'Epsilon' )
135 ALLOCATE(a(m2,n),af(m2,n),q(m2,m2),r(m2,m2),rwork(m2),
136 $ work(lwork),t(nb,n),c(m2,n),cf(m2,n),
142 CALL slaset(
'Full', m2, n, zero, zero, a, m2 )
143 CALL slaset(
'Full', nb, n, zero, zero, t, nb )
145 CALL slarnv( 2, iseed, j, a( 1, j ) )
149 CALL slarnv( 2, iseed, m-l, a( n+1, j ) )
154 CALL slarnv( 2, iseed,
min(j,l), a( n+m-l+1, j ) )
160 CALL slacpy(
'Full', m2, n, a, m2, af, m2 )
164 CALL stpqrt( m,n,l,nb,af,m2,af(np1,1),m2,t,ldt,work,info)
168 CALL slaset(
'Full', m2, m2, zero, one, q, m2 )
169 CALL sgemqrt(
'R',
'N', m2, m2, k, nb, af, m2, t, ldt, q, m2,
174 CALL slaset(
'Full', m2, n, zero, zero, r, m2 )
175 CALL slacpy(
'Upper', m2, n, af, m2, r, m2 )
179 CALL sgemm(
'T',
'N', m2, n, m2, -one, q, m2, a, m2, one, r, m2 )
180 anorm = slange(
'1', m2, n, a, m2, rwork )
181 resid = slange(
'1', m2, n, r, m2, rwork )
182 IF( anorm.GT.zero )
THEN
183 result( 1 ) = resid / (eps*anorm*
max(1,m2))
190 CALL slaset(
'Full', m2, m2, zero, one, r, m2 )
191 CALL ssyrk(
'U',
'C', m2, m2, -one, q, m2, one,
193 resid = slansy(
'1', 'upper
', M2, R, M2, RWORK )
194 RESULT( 2 ) = RESID / (EPS*MAX(1,M2))
199 CALL SLARNV( 2, ISEED, M2, C( 1, J ) )
201 CNORM = SLANGE( '1
', M2, N, C, M2, RWORK)
202 CALL SLACPY( 'full
', M2, N, C, M2, CF, M2 )
206 CALL STPMQRT( 'l
','n
', M,N,K,L,NB,AF(NP1,1),M2,T,LDT,CF,
207 $ M2,CF(NP1,1),M2,WORK,INFO)
211 CALL SGEMM( 'n
', 'n
', M2, N, M2, -ONE, Q,M2,C,M2,ONE,CF,M2)
212 RESID = SLANGE( '1
', M2, N, CF, M2, RWORK )
213.GT.
IF( CNORMZERO ) THEN
214 RESULT( 3 ) = RESID / (EPS*MAX(1,M2)*CNORM)
221 CALL SLACPY( 'full
', M2, N, C, M2, CF, M2 )
225 CALL STPMQRT('l
','t
',M,N,K,L,NB,AF(NP1,1),M2,T,LDT,CF,M2,
226 $ CF(NP1,1),M2,WORK,INFO)
230 CALL SGEMM('t
','n
',M2,N,M2,-ONE,Q,M2,C,M2,ONE,CF,M2)
231 RESID = SLANGE( '1
', M2, N, CF, M2, RWORK )
232.GT.
IF( CNORMZERO ) THEN
233 RESULT( 4 ) = RESID / (EPS*MAX(1,M2)*CNORM)
241 CALL SLARNV( 2, ISEED, N, D( 1, J ) )
243 DNORM = SLANGE( '1
', N, M2, D, N, RWORK)
244 CALL SLACPY( 'full
', N, M2, D, N, DF, N )
248 CALL STPMQRT('r
','n
',N,M,N,L,NB,AF(NP1,1),M2,T,LDT,DF,N,
249 $ DF(1,NP1),N,WORK,INFO)
253 CALL SGEMM('n
','n
',N,M2,M2,-ONE,D,N,Q,M2,ONE,DF,N)
254 RESID = SLANGE('1
',N, M2,DF,N,RWORK )
255.GT.
IF( CNORMZERO ) THEN
256 RESULT( 5 ) = RESID / (EPS*MAX(1,M2)*DNORM)
263 CALL SLACPY('full
',N,M2,D,N,DF,N )
267 CALL STPMQRT('r
','t
',N,M,N,L,NB,AF(NP1,1),M2,T,LDT,DF,N,
268 $ DF(1,NP1),N,WORK,INFO)
273 CALL SGEMM( 'n
', 't
', N, M2, M2, -ONE, D, N, Q, M2, ONE, DF, N )
274 RESID = SLANGE( '1
', N, M2, DF, N, RWORK )
275.GT.
IF( CNORMZERO ) THEN
276 RESULT( 6 ) = RESID / (EPS*MAX(1,M2)*DNORM)
283 DEALLOCATE ( A, AF, Q, R, RWORK, WORK, T, C, D, CF, DF)
subroutine sgemqrt(side, trans, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info)
SGEMQRT
subroutine stpmqrt(side, trans, m, n, k, l, nb, v, ldv, t, ldt, a, lda, b, ldb, work, info)
STPMQRT