181 SUBROUTINE cptrfs( UPLO, N, NRHS, D, E, DF, EF, B, LDB, X, LDX,
182 $ FERR, BERR, WORK, RWORK, INFO )
190 INTEGER INFO, LDB, LDX, N, NRHS
193 REAL BERR( * ), D( * ), DF( * ), FERR( * ),
195 COMPLEX B( LDB, * ), E( * ), EF( * ), WORK( * ),
203 parameter( itmax = 5 )
205 parameter( zero = 0.0e+0 )
207 PARAMETER ( one = 1.0e+0 )
209 parameter( two = 2.0e+0 )
211 parameter( three = 3.0e+0 )
215 INTEGER COUNT, I, IX, J, NZ
216 REAL EPS, LSTRES, , SAFE1, SAFE2, SAFMIN
217 COMPLEX BI, CX, DX, EX, ZDUM
229 INTRINSIC abs, aimag,
cmplx, conjg,
max, real
235 cabs1( zdum ) = abs( real( zdum ) ) + abs( aimag( zdum ) )
242 upper = lsame( uplo, 'u
' )
243.NOT..AND..NOT.
IF( UPPER LSAME( UPLO, 'l
' ) ) THEN
245.LT.
ELSE IF( N0 ) THEN
247.LT.
ELSE IF( NRHS0 ) THEN
249.LT.
ELSE IF( LDBMAX( 1, N ) ) THEN
251.LT.
ELSE IF( LDXMAX( 1, N ) ) THEN
255 CALL XERBLA( 'cptrfs', -INFO )
261.EQ..OR..EQ.
IF( N0 NRHS0 ) THEN
272 EPS = SLAMCH( 'epsilon
' )
273 SAFMIN = SLAMCH( 'safe minimum
' )
293 DX = D( 1 )*X( 1, J )
295 RWORK( 1 ) = CABS1( BI ) + CABS1( DX )
298 DX = D( 1 )*X( 1, J )
299 EX = E( 1 )*X( 2, J )
300 WORK( 1 ) = BI - DX - EX
301 RWORK( 1 ) = CABS1( BI ) + CABS1( DX ) +
302 $ CABS1( E( 1 ) )*CABS1( X( 2, J ) )
305 CX = CONJG( E( I-1 ) )*X( I-1, J )
306 DX = D( I )*X( I, J )
307 EX = E( I )*X( I+1, J )
308 WORK( I ) = BI - CX - DX - EX
309 RWORK( I ) = CABS1( BI ) +
310 $ CABS1( E( I-1 ) )*CABS1( X( I-1, J ) ) +
311 $ CABS1( DX ) + CABS1( E( I ) )*
312 $ CABS1( X( I+1, J ) )
315 CX = CONJG( E( N-1 ) )*X( N-1, J )
316 DX = D( N )*X( N, J )
317 WORK( N ) = BI - CX - DX
318 RWORK( N ) = CABS1( BI ) + CABS1( E( N-1 ) )*
319 $ CABS1( X( N-1, J ) ) + CABS1( DX )
324 DX = D( 1 )*X( 1, J )
326 RWORK( 1 ) = CABS1( BI ) + CABS1( DX )
329 DX = D( 1 )*X( 1, J )
330 EX = CONJG( E( 1 ) )*X( 2, J )
331 WORK( 1 ) = BI - DX - EX
332 RWORK( 1 ) = CABS1( BI ) + CABS1( DX ) +
333 $ CABS1( E( 1 ) )*CABS1( X( 2, J ) )
336 CX = E( I-1 )*X( I-1, J )
337 DX = D( I )*X( I, J )
338 EX = CONJG( E( I ) )*X( I+1, J )
339 WORK( I ) = BI - CX - DX - EX
340 RWORK( I ) = CABS1( BI ) +
341 $ CABS1( E( I-1 ) )*CABS1( X( I-1, J ) ) +
342 $ CABS1( DX ) + CABS1( E( I ) )*
343 $ CABS1( X( I+1, J ) )
346 CX = E( N-1 )*X( N-1, J )
347 DX = D( N )*X( N, J )
348 WORK( N ) = BI - CX - DX
349 RWORK( N ) = CABS1( BI ) + CABS1( E( N-1 ) )*
350 $ CABS1( X( N-1, J ) ) + CABS1( DX )
365.GT.
IF( RWORK( I )SAFE2 ) THEN
366 S = MAX( S, CABS1( WORK( I ) ) / RWORK( I ) )
368 S = MAX( S, ( CABS1( WORK( I ) )+SAFE1 ) /
369 $ ( RWORK( I )+SAFE1 ) )
380.GT..AND..LE..AND.
IF( BERR( J )EPS TWO*BERR( J )LSTRES
381.LE.
$ COUNTITMAX ) THEN
385 CALL CPTTRS( UPLO, N, 1, DF, EF, WORK, N, INFO )
386 CALL CAXPY( N, CMPLX( ONE ), WORK, 1, X( 1, J ), 1 )
411.GT.
IF( RWORK( I )SAFE2 ) THEN
412 RWORK( I ) = CABS1( WORK( I ) ) + NZ*EPS*RWORK( I )
414 RWORK( I ) = CABS1( WORK( I ) ) + NZ*EPS*RWORK( I ) +
418 IX = ISAMAX( N, RWORK, 1 )
419 FERR( J ) = RWORK( IX )
434 RWORK( I ) = ONE + RWORK( I-1 )*ABS( EF( I-1 ) )
439 RWORK( N ) = RWORK( N ) / DF( N )
440 DO 80 I = N - 1, 1, -1
441 RWORK( I ) = RWORK( I ) / DF( I ) +
442 $ RWORK( I+1 )*ABS( EF( I ) )
447 IX = ISAMAX( N, RWORK, 1 )
448 FERR( J ) = FERR( J )*ABS( RWORK( IX ) )
454 LSTRES = MAX( LSTRES, ABS( X( I, J ) ) )
457 $ FERR( J ) = FERR( J ) / LSTRES
subroutine cptrfs(uplo, n, nrhs, d, e, df, ef, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CPTRFS
subroutine cpttrs(uplo, n, nrhs, d, e, b, ldb, info)
CPTTRS