1*> \brief \b ZPOT06 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* SUBROUTINE ZPOT06( UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, 12* RWORK, RESID ) 13* 14* .. Scalar Arguments .. 15* CHARACTER UPLO 16* INTEGER LDA, LDB, LDX, N, NRHS 17* DOUBLE PRECISION RESID 18* .. 19* .. Array Arguments .. 20* DOUBLE PRECISION RWORK( * ) 21* COMPLEX*16 A( LDA, * ), B( LDB, * ), X( LDX, * ) 22* .. 23* 24* 25*> \par Purpose: 26* ============= 27*> 28*> \verbatim 29*> 30*> ZPOT06 computes the residual for a solution of a system of linear 31*> equations A*x = b : 32*> RESID = norm(B - A*X,inf) / ( norm(A,inf) * norm(X,inf) * EPS ), 33*> where EPS is the machine epsilon. 34*> \endverbatim 35* 36* Arguments: 37* ========== 38* 39*> \param[in] UPLO 40*> \verbatim 41*> UPLO is CHARACTER*1 42*> Specifies whether the upper or lower triangular part of the 43*> symmetric matrix A is stored: 44*> = 'U': Upper triangular 45*> = 'L': Lower triangular 46*> \endverbatim 47*> 48*> \param[in] N 49*> \verbatim 50*> N is INTEGER 51*> The number of rows and columns of the matrix A. N >= 0. 52*> \endverbatim 53*> 54*> \param[in] NRHS 55*> \verbatim 56*> NRHS is INTEGER 57*> The number of columns of B, the matrix of right hand sides. 58*> NRHS >= 0. 59*> \endverbatim 60*> 61*> \param[in] A 62*> \verbatim 63*> A is COMPLEX*16 array, dimension (LDA,N) 64*> The original M x N matrix A. 65*> \endverbatim 66*> 67*> \param[in] LDA 68*> \verbatim 69*> LDA is INTEGER 70*> The leading dimension of the array A. LDA >= max(1,N). 71*> \endverbatim 72*> 73*> \param[in] X 74*> \verbatim 75*> X is COMPLEX*16 array, dimension (LDX,NRHS) 76*> The computed solution vectors for the system of linear 77*> equations. 78*> \endverbatim 79*> 80*> \param[in] LDX 81*> \verbatim 82*> LDX is INTEGER 83*> The leading dimension of the array X. If TRANS = 'N', 84*> LDX >= max(1,N); if TRANS = 'T' or 'C', LDX >= max(1,N). 85*> \endverbatim 86*> 87*> \param[in,out] B 88*> \verbatim 89*> B is COMPLEX*16 array, dimension (LDB,NRHS) 90*> On entry, the right hand side vectors for the system of 91*> linear equations. 92*> On exit, B is overwritten with the difference B - A*X. 93*> \endverbatim 94*> 95*> \param[in] LDB 96*> \verbatim 97*> LDB is INTEGER 98*> The leading dimension of the array B. IF TRANS = 'N', 99*> LDB >= max(1,M); if TRANS = 'T' or 'C', LDB >= max(1,N). 100*> \endverbatim 101*> 102*> \param[out] RWORK 103*> \verbatim 104*> RWORK is DOUBLE PRECISION array, dimension (N) 105*> \endverbatim 106*> 107*> \param[out] RESID 108*> \verbatim 109*> RESID is DOUBLE PRECISION 110*> The maximum over the number of right hand sides of 111*> norm(B - A*X) / ( norm(A) * norm(X) * EPS ). 112*> \endverbatim 113* 114* Authors: 115* ======== 116* 117*> \author Univ. of Tennessee 118*> \author Univ. of California Berkeley 119*> \author Univ. of Colorado Denver 120*> \author NAG Ltd. 121* 122*> \ingroup complex16_lin 123* 124* ===================================================================== 125 SUBROUTINE ZPOT06( UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, 126 $ RWORK, RESID ) 127* 128* -- LAPACK test routine -- 129* -- LAPACK is a software package provided by Univ. of Tennessee, -- 130* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 131* 132* .. Scalar Arguments .. 133 CHARACTER UPLO 134 INTEGER LDA, LDB, LDX, N, NRHS 135 DOUBLE PRECISION RESID 136* .. 137* .. Array Arguments .. 138 DOUBLE PRECISION RWORK( * ) 139 COMPLEX*16 A( LDA, * ), B( LDB, * ), X( LDX, * ) 140* .. 141* 142* ===================================================================== 143* 144* .. Parameters .. 145 DOUBLE PRECISION ZERO, ONE 146 PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) 147 COMPLEX*16 CONE, NEGCONE 148 PARAMETER ( CONE = ( 1.0D+0, 0.0D+0 ) ) 149 PARAMETER ( NEGCONE = ( -1.0D+0, 0.0D+0 ) ) 150* .. 151* .. Local Scalars .. 152 INTEGER IFAIL, J 153 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM 154 COMPLEX*16 ZDUM 155* .. 156* .. External Functions .. 157 LOGICAL LSAME 158 INTEGER IZAMAX 159 DOUBLE PRECISION DLAMCH, ZLANSY 160 EXTERNAL LSAME, IZAMAX, DLAMCH, ZLANSY 161* .. 162* .. External Subroutines .. 163 EXTERNAL ZHEMM 164* .. 165* .. Intrinsic Functions .. 166 INTRINSIC ABS, DBLE, DIMAG, MAX 167* .. 168* .. Statement Functions .. 169 DOUBLE PRECISION CABS1 170* .. 171* .. Statement Function definitions .. 172 CABS1( ZDUM ) = ABS( DBLE( ZDUM ) ) + ABS( DIMAG( ZDUM ) ) 173* .. 174* .. 175* .. Executable Statements .. 176* 177* Quick exit if N = 0 or NRHS = 0 178* 179 IF( N.LE.0 .OR. NRHS.EQ.0 ) THEN 180 RESID = ZERO 181 RETURN 182 END IF 183* 184* Exit with RESID = 1/EPS if ANORM = 0. 185* 186 EPS = DLAMCH( 'Epsilon' ) 187 ANORM = ZLANSY( 'I', UPLO, N, A, LDA, RWORK ) 188 IF( ANORM.LE.ZERO ) THEN 189 RESID = ONE / EPS 190 RETURN 191 END IF 192* 193* Compute B - A*X and store in B. 194 IFAIL=0 195* 196 CALL ZHEMM( 'Left', UPLO, N, NRHS, NEGCONE, A, LDA, X, 197 $ LDX, CONE, B, LDB ) 198* 199* Compute the maximum over the number of right hand sides of 200* norm(B - A*X) / ( norm(A) * norm(X) * EPS ) . 201* 202 RESID = ZERO 203 DO 10 J = 1, NRHS 204 BNORM = CABS1(B(IZAMAX( N, B( 1, J ), 1 ),J)) 205 XNORM = CABS1(X(IZAMAX( N, X( 1, J ), 1 ),J)) 206 IF( XNORM.LE.ZERO ) THEN 207 RESID = ONE / EPS 208 ELSE 209 RESID = MAX( RESID, ( ( BNORM / ANORM ) / XNORM ) / EPS ) 210 END IF 211 10 CONTINUE 212* 213 RETURN 214* 215* End of ZPOT06 216* 217 END 218