1 SUBROUTINE dpot05( UPLO, N, NRHS, A, LDA, B, LDB, X, LDX, XACT,
2 $ ldxact, ferr, berr, reslts )
10 INTEGER lda, ldb, ldx, ldxact, n, nrhs
13 DOUBLE PRECISION a( lda, * ), b( ldb, * ), berr( * ), ferr( * ),
14 $ reslts( * ), x( ldx, * ), xact( ldxact, * )
102 DOUBLE PRECISION zero, one
103 parameter( zero = 0.0d+0, one = 1.0d+0 )
107 INTEGER i, imax, j, k
108 DOUBLE PRECISION axbi, diff, eps, errbnd, ovfl, tmp, unfl, xnorm
113 DOUBLE PRECISION dlamch
114 EXTERNAL lsame, idamax, dlamch
123 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
129 eps = dlamch(
'Epsilon' )
130 unfl = dlamch(
'Safe minimum' )
132 upper = lsame(
uplo,
'U' )
140 imax = idamax( n, x( 1, j ), 1 )
141 xnorm =
max( abs( x( imax, j ) ), unfl )
144 diff =
max( diff, abs( x( i, j )-xact( i, j ) ) )
147 IF( xnorm.GT.one )
THEN
149 ELSE IF( diff.LE.ovfl*xnorm )
THEN
157 IF( diff / xnorm.LE.ferr( j ) )
THEN
158 errbnd =
max( errbnd, ( diff / xnorm ) / ferr( j ) )
170 tmp = abs( b( i, k ) )
173 tmp = tmp + abs( a( j, i ) )*abs( x( j, k ) )
176 tmp = tmp + abs( a( i, j ) )*abs( x( j, k ) )
180 tmp = tmp + abs( a( i, j ) )*abs( x( j, k ) )
183 tmp = tmp + abs( a( j, i ) )*abs( x( j, k ) )
189 axbi =
min( axbi, tmp )
192 tmp = berr( k ) / ( ( n+1 )*eps+( n+1 )*unfl /
193 $
max( axbi, ( n+1 )*unfl ) )
197 reslts( 2 ) =
max( reslts( 2 ), tmp )