This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
=SCRIPT====================================================================
if which tempfile &>/dev/null; then
TEMPMAKER=tempfile
elif which mktemp &>/dev/null; then
TEMPMAKER=mktemp
else
echo "Cannot find tempfile program." 2>&1
exit 1
fi
MYTEMP=$($TEMPMAKER)
trap 'rm -f $MYTEMP' SIGINT SIGTERM
stripit() {
echo "stripping $1"
sed 's/[ \t]*$//' "$1" > $MYTEMP
cp $MYTEMP "$1"
}
if [ $# -gt 0 ]; then
while [ "$1" != "" ]; do
stripit $1
shift
done
else
while read -t 2; do
stripit $REPLY
done
fi
rm $MYTEMP
=================================================
207 lines
5.3 KiB
FortranFixed
207 lines
5.3 KiB
FortranFixed
*> \brief \b CPPT02
|
|
*
|
|
* =========== DOCUMENTATION ===========
|
|
*
|
|
* Online html documentation available at
|
|
* http://www.netlib.org/lapack/explore-html/
|
|
*
|
|
* Definition:
|
|
* ===========
|
|
*
|
|
* SUBROUTINE CPPT02( UPLO, N, NRHS, A, X, LDX, B, LDB, RWORK,
|
|
* RESID )
|
|
*
|
|
* .. Scalar Arguments ..
|
|
* CHARACTER UPLO
|
|
* INTEGER LDB, LDX, N, NRHS
|
|
* REAL RESID
|
|
* ..
|
|
* .. Array Arguments ..
|
|
* REAL RWORK( * )
|
|
* COMPLEX A( * ), B( LDB, * ), X( LDX, * )
|
|
* ..
|
|
*
|
|
*
|
|
*> \par Purpose:
|
|
* =============
|
|
*>
|
|
*> \verbatim
|
|
*>
|
|
*> CPPT02 computes the residual in the solution of a Hermitian system
|
|
*> of linear equations A*x = b when packed storage is used for the
|
|
*> coefficient matrix. The ratio computed is
|
|
*>
|
|
*> RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS),
|
|
*>
|
|
*> where EPS is the machine precision.
|
|
*> \endverbatim
|
|
*
|
|
* Arguments:
|
|
* ==========
|
|
*
|
|
*> \param[in] UPLO
|
|
*> \verbatim
|
|
*> UPLO is CHARACTER*1
|
|
*> Specifies whether the upper or lower triangular part of the
|
|
*> Hermitian matrix A is stored:
|
|
*> = 'U': Upper triangular
|
|
*> = 'L': Lower triangular
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] N
|
|
*> \verbatim
|
|
*> N is INTEGER
|
|
*> The number of rows and columns of the matrix A. N >= 0.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] NRHS
|
|
*> \verbatim
|
|
*> NRHS is INTEGER
|
|
*> The number of columns of B, the matrix of right hand sides.
|
|
*> NRHS >= 0.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] A
|
|
*> \verbatim
|
|
*> A is COMPLEX array, dimension (N*(N+1)/2)
|
|
*> The original Hermitian matrix A, stored as a packed
|
|
*> triangular matrix.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] X
|
|
*> \verbatim
|
|
*> X is COMPLEX array, dimension (LDX,NRHS)
|
|
*> The computed solution vectors for the system of linear
|
|
*> equations.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] LDX
|
|
*> \verbatim
|
|
*> LDX is INTEGER
|
|
*> The leading dimension of the array X. LDX >= max(1,N).
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in,out] B
|
|
*> \verbatim
|
|
*> B is COMPLEX array, dimension (LDB,NRHS)
|
|
*> On entry, the right hand side vectors for the system of
|
|
*> linear equations.
|
|
*> On exit, B is overwritten with the difference B - A*X.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] LDB
|
|
*> \verbatim
|
|
*> LDB is INTEGER
|
|
*> The leading dimension of the array B. LDB >= max(1,N).
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[out] RWORK
|
|
*> \verbatim
|
|
*> RWORK is REAL array, dimension (N)
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[out] RESID
|
|
*> \verbatim
|
|
*> RESID is REAL
|
|
*> The maximum over the number of right hand sides of
|
|
*> norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
|
|
*> \endverbatim
|
|
*
|
|
* Authors:
|
|
* ========
|
|
*
|
|
*> \author Univ. of Tennessee
|
|
*> \author Univ. of California Berkeley
|
|
*> \author Univ. of Colorado Denver
|
|
*> \author NAG Ltd.
|
|
*
|
|
*> \date November 2011
|
|
*
|
|
*> \ingroup complex_lin
|
|
*
|
|
* =====================================================================
|
|
SUBROUTINE CPPT02( UPLO, N, NRHS, A, X, LDX, B, LDB, RWORK,
|
|
$ RESID )
|
|
*
|
|
* -- LAPACK test routine (version 3.4.0) --
|
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
|
* November 2011
|
|
*
|
|
* .. Scalar Arguments ..
|
|
CHARACTER UPLO
|
|
INTEGER LDB, LDX, N, NRHS
|
|
REAL RESID
|
|
* ..
|
|
* .. Array Arguments ..
|
|
REAL RWORK( * )
|
|
COMPLEX A( * ), B( LDB, * ), X( LDX, * )
|
|
* ..
|
|
*
|
|
* =====================================================================
|
|
*
|
|
* .. Parameters ..
|
|
REAL ZERO, ONE
|
|
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
|
|
COMPLEX CONE
|
|
PARAMETER ( CONE = ( 1.0E+0, 0.0E+0 ) )
|
|
* ..
|
|
* .. Local Scalars ..
|
|
INTEGER J
|
|
REAL ANORM, BNORM, EPS, XNORM
|
|
* ..
|
|
* .. External Functions ..
|
|
REAL CLANHP, SCASUM, SLAMCH
|
|
EXTERNAL CLANHP, SCASUM, SLAMCH
|
|
* ..
|
|
* .. External Subroutines ..
|
|
EXTERNAL CHPMV
|
|
* ..
|
|
* .. Intrinsic Functions ..
|
|
INTRINSIC MAX
|
|
* ..
|
|
* .. Executable Statements ..
|
|
*
|
|
* Quick exit if N = 0 or NRHS = 0.
|
|
*
|
|
IF( N.LE.0 .OR. NRHS.LE.0 ) THEN
|
|
RESID = ZERO
|
|
RETURN
|
|
END IF
|
|
*
|
|
* Exit with RESID = 1/EPS if ANORM = 0.
|
|
*
|
|
EPS = SLAMCH( 'Epsilon' )
|
|
ANORM = CLANHP( '1', UPLO, N, A, RWORK )
|
|
IF( ANORM.LE.ZERO ) THEN
|
|
RESID = ONE / EPS
|
|
RETURN
|
|
END IF
|
|
*
|
|
* Compute B - A*X for the matrix of right hand sides B.
|
|
*
|
|
DO 10 J = 1, NRHS
|
|
CALL CHPMV( UPLO, N, -CONE, A, X( 1, J ), 1, CONE, B( 1, J ),
|
|
$ 1 )
|
|
10 CONTINUE
|
|
*
|
|
* Compute the maximum over the number of right hand sides of
|
|
* norm( B - A*X ) / ( norm(A) * norm(X) * EPS ) .
|
|
*
|
|
RESID = ZERO
|
|
DO 20 J = 1, NRHS
|
|
BNORM = SCASUM( N, B( 1, J ), 1 )
|
|
XNORM = SCASUM( N, X( 1, J ), 1 )
|
|
IF( XNORM.LE.ZERO ) THEN
|
|
RESID = ONE / EPS
|
|
ELSE
|
|
RESID = MAX( RESID, ( ( BNORM/ANORM )/XNORM )/EPS )
|
|
END IF
|
|
20 CONTINUE
|
|
*
|
|
RETURN
|
|
*
|
|
* End of CPPT02
|
|
*
|
|
END
|