207 SUBROUTINE zgtrfs( TRANS, N, NRHS, DL, D, DU, DLF, DF, DUF, DU2,
208 $ IPIV, B, LDB, X, LDX, FERR, BERR, WORK, RWORK,
217 INTEGER INFO, LDB, LDX, , NRHS
221 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
222 COMPLEX*16 B( LDB, * ), D( * ), DF( * ), DL( * ),
223 $ dlf( * ), du( * ), du2( * ), duf( * ),
224 $ work( * ), x( ldx, * )
231 PARAMETER ( ITMAX = 5 )
232 DOUBLE PRECISION , ONE
233 parameter( zero = 0.0d+0, one = 1.0d+0 )
235 parameter( two = 2.0d+0 )
236 DOUBLE PRECISION THREE
237 parameter( three = 3.0d+0 )
241 CHARACTER TRANSN, TRANST
242 INTEGER COUNT, I, J, KASE, NZ
243 DOUBLE PRECISION EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN
253 INTRINSIC abs, dble, dcmplx, dimag,
max
257 DOUBLE PRECISION DLAMCH
258 EXTERNAL lsame, dlamch
261 DOUBLE PRECISION CABS1
264 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
271 notran = lsame( trans,
'N' )
272 IF( .NOT.notran .AND. .NOT.lsame( trans,
'T' ) .AND. .NOT.
273 $ lsame( trans,
'C' ) )
THEN
275 ELSE IF( n.LT.0 )
THEN
277 ELSE IF( nrhs.LT.0 )
THEN
279 ELSE IF( ldb.LT.
max( 1, n ) )
THEN
281 ELSE IF( ldx.LT.
max( 1, n ) )
THEN
291.EQ..OR..EQ.
IF( N0 NRHS0 ) THEN
310 EPS = DLAMCH( 'epsilon
' )
311 SAFMIN = DLAMCH( 'safe minimum
' )
328 CALL ZCOPY( N, B( 1, J ), 1, WORK, 1 )
329 CALL ZLAGTM( TRANS, N, 1, -ONE, DL, D, DU, X( 1, J ), LDX, ONE,
337 RWORK( 1 ) = CABS1( B( 1, J ) ) +
338 $ CABS1( D( 1 ) )*CABS1( X( 1, J ) )
340 RWORK( 1 ) = CABS1( B( 1, J ) ) +
341 $ CABS1( D( 1 ) )*CABS1( X( 1, J ) ) +
342 $ CABS1( DU( 1 ) )*CABS1( X( 2, J ) )
344 RWORK( I ) = CABS1( B( I, J ) ) +
345 $ CABS1( DL( I-1 ) )*CABS1( X( I-1, J ) ) +
346 $ CABS1( D( I ) )*CABS1( X( I, J ) ) +
347 $ CABS1( DU( I ) )*CABS1( X( I+1, J ) )
349 RWORK( N ) = CABS1( B( N, J ) ) +
350 $ CABS1( DL( N-1 ) )*CABS1( X( N-1, J ) ) +
351 $ CABS1( D( N ) )*CABS1( X( N, J ) )
355 RWORK( 1 ) = CABS1( B( 1, J ) ) +
356 $ CABS1( D( 1 ) )*CABS1( X( 1, J ) )
358 RWORK( 1 ) = CABS1( B( 1, J ) ) +
359 $ CABS1( D( 1 ) )*CABS1( X( 1, J ) ) +
360 $ CABS1( DL( 1 ) )*CABS1( X( 2, J ) )
362 RWORK( I ) = CABS1( B( I, J ) ) +
363 $ CABS1( DU( I-1 ) )*CABS1( X( I-1, J ) ) +
364 $ CABS1( D( I ) )*CABS1( X( I, J ) ) +
365 $ CABS1( DL( I ) )*CABS1( X( I+1, J ) )
367 RWORK( N ) = CABS1( B( N, J ) ) +
368 $ CABS1( DU( N-1 ) )*CABS1( X( N-1, J ) ) +
369 $ CABS1( D( N ) )*CABS1( X( N, J ) )
384.GT.
IF( RWORK( I )SAFE2 ) THEN
385 S = MAX( S, CABS1( WORK( I ) ) / RWORK( I ) )
387 S = MAX( S, ( CABS1( WORK( I ) )+SAFE1 ) /
388 $ ( RWORK( I )+SAFE1 ) )
399.GT..AND..LE..AND.
IF( BERR( J )EPS TWO*BERR( J )LSTRES
400.LE.
$ COUNTITMAX ) THEN
404 CALL ZGTTRS( TRANS, N, 1, DLF, DF, DUF, DU2, IPIV, WORK, N,
406 CALL ZAXPY( N, DCMPLX( ONE ), WORK, 1, X( 1, J ), 1 )
435.GT.
IF( RWORK( I )SAFE2 ) THEN
436 RWORK( I ) = CABS1( WORK( I ) ) + NZ*EPS*RWORK( I )
438 RWORK( I ) = CABS1( WORK( I ) ) + NZ*EPS*RWORK( I ) +
445 CALL ZLACN2( N, WORK( N+1 ), WORK, FERR( J ), KASE, ISAVE )
451 CALL ZGTTRS( TRANST, N, 1, DLF, DF, DUF, DU2, IPIV, WORK,
454 WORK( I ) = RWORK( I )*WORK( I )
461 WORK( I ) = RWORK( I )*WORK( I )
463 CALL ZGTTRS( TRANSN, N, 1, DLF, DF, DUF, DU2, IPIV, WORK,
473 LSTRES = MAX( LSTRES, CABS1( X( I, J ) ) )
476 $ FERR( J ) = FERR( J ) / LSTRES
subroutine xerbla(srname, info)
XERBLA
subroutine zgtrfs(trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZGTRFS
subroutine zgttrs(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb, info)
ZGTTRS
subroutine zlagtm(trans, n, nrhs, alpha, dl, d, du, x, ldx, beta, b, ldb)
ZLAGTM performs a matrix-matrix product of the form C = αAB+βC, where A is a tridiagonal matrix,...
subroutine zlacn2(n, v, x, est, kase, isave)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY