1 SUBROUTINE cgtt01( N, DL, D, DU, DLF, DF, DUF, DU2, IPIV, WORK,
2 $ ldwork, rwork, resid )
15 COMPLEX d( * ), df( * ), dl( * ), dlf( * ), du( * ),
16 $ du2( * ), duf( * ), work( ldwork, * )
76 parameter( one = 1.0e+0, zero = 0.0e+0 )
79 INTEGER i, ip, j, lastj
84 REAL clangt, clanhs, slamch
85 EXTERNAL clangt, clanhs, slamch
102 eps = slamch(
'Epsilon' )
113 work( i, i ) = df( i )
115 $ work( i, i+1 ) = duf( i )
117 $ work( i, i+2 ) = du2( i )
118 ELSE IF( i.EQ.n )
THEN
119 work( i, i ) = df( i )
121 work( i, i ) = df( i )
122 work( i, i+1 ) = duf( i )
124 $ work( i, i+2 ) = du2( i )
131 DO 40 i = n - 1, 1, -1
133 CALL caxpy( lastj-i+1, li, work( i, i ), ldwork,
134 $ work( i+1, i ), ldwork )
137 lastj =
min( i+2, n )
139 CALL cswap( lastj-i+1, work( i, i ), ldwork, work( i+1, i ),
146 work( 1, 1 ) = work( 1, 1 ) - d( 1 )
148 work( 1, 2 ) = work( 1, 2 ) - du( 1 )
149 work( n, n-1 ) = work( n, n-1 ) - dl( n-1 )
150 work( n, n ) = work( n, n ) - d( n )
152 work( i, i-1 ) = work( i, i-1 ) - dl( i-1 )
153 work( i, i ) = work( i, i ) - d( i )
154 work( i, i+1 ) = work( i, i+1 ) - du( i )
160 anorm = clangt(
'1', n, dl, d, du )
165 resid = clanhs(
'1', n, work, ldwork, rwork )
169 IF( anorm.LE.zero )
THEN
173 resid = ( resid / anorm ) / eps