162 SUBROUTINE ctpt03( UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM,
163 $ tscal, x, ldx, b, ldb, work, resid )
171 CHARACTER DIAG, TRANS, UPLO
172 INTEGER LDB, LDX, N, NRHS
173 REAL RESID, SCALE, TSCAL
177 COMPLEX AP( * ), B( ldb, * ), WORK( * ), X( ldx, * )
184 parameter ( one = 1.0e+0, zero = 0.0e+0 )
188 REAL EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
194 EXTERNAL lsame, icamax, slamch
200 INTRINSIC abs, cmplx, max, real
206 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
210 eps = slamch(
'Epsilon' )
211 smlnum = slamch(
'Safe minimum' )
217 IF( lsame( diag,
'N' ) )
THEN
218 IF( lsame( uplo,
'U' ) )
THEN
221 tnorm = max( tnorm, tscal*abs( ap( jj ) )+cnorm( j ) )
227 tnorm = max( tnorm, tscal*abs( ap( jj ) )+cnorm( j ) )
233 tnorm = max( tnorm, tscal+cnorm( j ) )
242 CALL ccopy( n, x( 1, j ), 1, work, 1 )
243 ix = icamax( n, work, 1 )
244 xnorm = max( one, abs( x( ix, j ) ) )
245 xscal = ( one / xnorm ) /
REAL( n )
246 CALL csscal( n, xscal, work, 1 )
247 CALL ctpmv( uplo, trans, diag, n, ap, work, 1 )
248 CALL caxpy( n, cmplx( -scale*xscal ), b( 1, j ), 1, work, 1 )
249 ix = icamax( n, work, 1 )
250 err = tscal*abs( work( ix ) )
251 ix = icamax( n, x( 1, j ), 1 )
252 xnorm = abs( x( ix, j ) )
253 IF( err*smlnum.LE.xnorm )
THEN
260 IF( err*smlnum.LE.tnorm )
THEN
267 resid = max( resid, err )
subroutine ctpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
CTPMV
subroutine ctpt03(UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
CTPT03
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine caxpy(N, CA, CX, INCX, CY, INCY)
CAXPY
subroutine csscal(N, SA, CX, INCX)
CSSCAL