105 SUBROUTINE dget01( M, N, A, LDA, AFAC, LDAFAC, IPIV, RWORK,
113 INTEGER LDA, LDAFAC, M, N
114 DOUBLE PRECISION RESID
118 DOUBLE PRECISION A( LDA, * ), AFAC( LDAFAC, * ), RWORK( * )
125 DOUBLE PRECISION ZERO, ONE
126 parameter( zero = 0.0d+0, one = 1.0d+0 )
130 DOUBLE PRECISION ANORM, EPS, T
133 DOUBLE PRECISION DDOT, DLAMCH, DLANGE
134 EXTERNAL ddot, dlamch, dlange
146 IF( m.LE.0 .OR. n.LE.0 )
THEN
153 eps = dlamch(
'Epsilon' )
154 anorm = dlange(
'1', m, n, a, lda, rwork )
162 CALL dtrmv(
'Lower',
'No transpose',
'Unit', m, afac,
163 $ ldafac, afac( 1, k ), 1 )
170 CALL dscal( m-k, t, afac( k+1, k ), 1 )
171 CALL dgemv(
'No transpose', m-k, k-1, one,
172 $ afac( k+1, 1 ), ldafac, afac( 1, k ), 1, one,
173 $ afac( k+1, k ), 1 )
178 afac( k, k ) = t + ddot( k-1, afac( k, 1 ), ldafac,
183 CALL dtrmv(
'Lower',
'No transpose',
'Unit', k-1, afac,
184 $ ldafac, afac( 1, k ), 1 )
187 CALL dlaswp( n, afac, ldafac, 1, min( m, n ), ipiv, -1 )
193 afac( i, j ) = afac( i, j ) - a( i, j )
199 resid = dlange(
'1', m, n, afac, ldafac, rwork )
201 IF( anorm.LE.zero )
THEN
205 resid = ( ( resid / dble( n ) ) / anorm ) / eps
subroutine dget01(m, n, a, lda, afac, ldafac, ipiv, rwork, resid)
DGET01
subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
DGEMV
subroutine dlaswp(n, a, lda, k1, k2, ipiv, incx)
DLASWP performs a series of row interchanges on a general rectangular matrix.
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dtrmv(uplo, trans, diag, n, a, lda, x, incx)
DTRMV