178 SUBROUTINE csprfs( UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX,
179 $ FERR, BERR, WORK, RWORK, INFO )
187 INTEGER INFO, LDB, LDX, N, NRHS
191 REAL BERR( * ), FERR( * ), RWORK( * )
192 COMPLEX AFP( * ), AP( * ), B( LDB, * ), WORK( * ),
200 parameter( itmax = 5 )
202 parameter( zero = 0.0e+0 )
204 parameter( one = ( 1.0e+0, 0.0e+0 ) )
206 parameter( two = 2.0e+0 )
208 parameter( three = 3.0e+0 )
212 INTEGER COUNT, I, IK, J, K, KASE, KK, NZ
213 REAL EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
223 INTRINSIC abs, aimag, max, real
228 EXTERNAL lsame, slamch
234 cabs1( zdum ) = abs( real( zdum ) ) + abs( aimag( zdum ) )
241 upper = lsame( uplo,
'U' )
242 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
244 ELSE IF( n.LT.0 )
THEN
246 ELSE IF( nrhs.LT.0 )
THEN
248 ELSE IF( ldb.LT.max( 1, n ) )
THEN
250 ELSE IF( ldx.LT.max( 1, n ) )
THEN
254 CALL xerbla(
'CSPRFS', -info )
260 IF( n.EQ.0 .OR. nrhs.EQ.0 )
THEN
271 eps = slamch(
'Epsilon' )
272 safmin = slamch(
'Safe minimum' )
288 CALL ccopy( n, b( 1, j ), 1, work, 1 )
289 CALL cspmv( uplo, n, -one, ap, x( 1, j ), 1, one, work, 1 )
301 rwork( i ) = cabs1( b( i, j ) )
310 xk = cabs1( x( k, j ) )
313 rwork( i ) = rwork( i ) + cabs1( ap( ik ) )*xk
314 s = s + cabs1( ap( ik ) )*cabs1( x( i, j ) )
317 rwork( k ) = rwork( k ) + cabs1( ap( kk+k-1 ) )*xk + s
323 xk = cabs1( x( k, j ) )
324 rwork( k ) = rwork( k ) + cabs1( ap( kk ) )*xk
327 rwork( i ) = rwork( i ) + cabs1( ap( ik ) )*xk
328 s = s + cabs1( ap( ik ) )*cabs1( x( i, j ) )
331 rwork( k ) = rwork( k ) + s
337 IF( rwork( i ).GT.safe2 )
THEN
338 s = max( s, cabs1( work( i ) ) / rwork( i ) )
340 s = max( s, ( cabs1( work( i ) )+safe1 ) /
341 $ ( rwork( i )+safe1 ) )
352 IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
353 $ count.LE.itmax )
THEN
357 CALL csptrs( uplo, n, 1, afp, ipiv, work, n, info )
358 CALL caxpy( n, one, work, 1, x( 1, j ), 1 )
387 IF( rwork( i ).GT.safe2 )
THEN
388 rwork( i ) = cabs1( work( i ) ) + nz*eps*rwork( i )
390 rwork( i ) = cabs1( work( i ) ) + nz*eps*rwork( i ) +
397 CALL clacn2( n, work( n+1 ), work, ferr( j ), kase, isave )
403 CALL csptrs( uplo, n, 1, afp, ipiv, work, n, info )
405 work( i ) = rwork( i )*work( i )
407 ELSE IF( kase.EQ.2 )
THEN
412 work( i ) = rwork( i )*work( i )
414 CALL csptrs( uplo, n, 1, afp, ipiv, work, n, info )
423 lstres = max( lstres, cabs1( x( i, j ) ) )
426 $ ferr( j ) = ferr( j ) / lstres
subroutine xerbla(srname, info)
subroutine caxpy(n, ca, cx, incx, cy, incy)
CAXPY
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine cspmv(uplo, n, alpha, ap, x, incx, beta, y, incy)
CSPMV computes a matrix-vector product for complex vectors using a complex symmetric packed matrix
subroutine csprfs(uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CSPRFS
subroutine csptrs(uplo, n, nrhs, ap, ipiv, b, ldb, info)
CSPTRS
subroutine clacn2(n, v, x, est, kase, isave)
CLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...