LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
zpbt02.f
Go to the documentation of this file.
1*> \brief \b ZPBT02
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 ZPBT02( UPLO, N, KD, NRHS, A, LDA, X, LDX, B, LDB,
12* RWORK, RESID )
13*
14* .. Scalar Arguments ..
15* CHARACTER UPLO
16* INTEGER KD, 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*> ZPBT02 computes the residual for a solution of a Hermitian banded
31*> system of equations A*x = b:
32*> RESID = norm( B - A*X ) / ( norm(A) * norm(X) * EPS)
33*> where EPS is the machine precision.
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*> Hermitian 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] KD
55*> \verbatim
56*> KD is INTEGER
57*> The number of super-diagonals of the matrix A if UPLO = 'U',
58*> or the number of sub-diagonals if UPLO = 'L'. KD >= 0.
59*> \endverbatim
60*>
61*> \param[in] NRHS
62*> \verbatim
63*> NRHS is INTEGER
64*> The number of right hand sides. NRHS >= 0.
65*> \endverbatim
66*>
67*> \param[in] A
68*> \verbatim
69*> A is COMPLEX*16 array, dimension (LDA,N)
70*> The original Hermitian band matrix A. If UPLO = 'U', the
71*> upper triangular part of A is stored as a band matrix; if
72*> UPLO = 'L', the lower triangular part of A is stored. The
73*> columns of the appropriate triangle are stored in the columns
74*> of A and the diagonals of the triangle are stored in the rows
75*> of A. See ZPBTRF for further details.
76*> \endverbatim
77*>
78*> \param[in] LDA
79*> \verbatim
80*> LDA is INTEGER.
81*> The leading dimension of the array A. LDA >= max(1,KD+1).
82*> \endverbatim
83*>
84*> \param[in] X
85*> \verbatim
86*> X is COMPLEX*16 array, dimension (LDX,NRHS)
87*> The computed solution vectors for the system of linear
88*> equations.
89*> \endverbatim
90*>
91*> \param[in] LDX
92*> \verbatim
93*> LDX is INTEGER
94*> The leading dimension of the array X. LDX >= max(1,N).
95*> \endverbatim
96*>
97*> \param[in,out] B
98*> \verbatim
99*> B is COMPLEX*16 array, dimension (LDB,NRHS)
100*> On entry, the right hand side vectors for the system of
101*> linear equations.
102*> On exit, B is overwritten with the difference B - A*X.
103*> \endverbatim
104*>
105*> \param[in] LDB
106*> \verbatim
107*> LDB is INTEGER
108*> The leading dimension of the array B. LDB >= max(1,N).
109*> \endverbatim
110*>
111*> \param[out] RWORK
112*> \verbatim
113*> RWORK is DOUBLE PRECISION array, dimension (N)
114*> \endverbatim
115*>
116*> \param[out] RESID
117*> \verbatim
118*> RESID is DOUBLE PRECISION
119*> The maximum over the number of right hand sides of
120*> norm(B - A*X) / ( norm(A) * norm(X) * EPS ).
121*> \endverbatim
122*
123* Authors:
124* ========
125*
126*> \author Univ. of Tennessee
127*> \author Univ. of California Berkeley
128*> \author Univ. of Colorado Denver
129*> \author NAG Ltd.
130*
131*> \ingroup complex16_lin
132*
133* =====================================================================
134 SUBROUTINE zpbt02( UPLO, N, KD, NRHS, A, LDA, X, LDX, B, LDB,
135 $ RWORK, RESID )
136*
137* -- LAPACK test routine --
138* -- LAPACK is a software package provided by Univ. of Tennessee, --
139* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
140*
141* .. Scalar Arguments ..
142 CHARACTER UPLO
143 INTEGER KD, LDA, LDB, LDX, N, NRHS
144 DOUBLE PRECISION RESID
145* ..
146* .. Array Arguments ..
147 DOUBLE PRECISION RWORK( * )
148 COMPLEX*16 A( LDA, * ), B( LDB, * ), X( LDX, * )
149* ..
150*
151* =====================================================================
152*
153* .. Parameters ..
154 DOUBLE PRECISION ZERO, ONE
155 parameter( zero = 0.0d+0, one = 1.0d+0 )
156 COMPLEX*16 CONE
157 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
158* ..
159* .. Local Scalars ..
160 INTEGER J
161 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
162* ..
163* .. External Functions ..
164 DOUBLE PRECISION DLAMCH, DZASUM, ZLANHB
165 EXTERNAL dlamch, dzasum, zlanhb
166* ..
167* .. External Subroutines ..
168 EXTERNAL zhbmv
169* ..
170* .. Intrinsic Functions ..
171 INTRINSIC max
172* ..
173* .. Executable Statements ..
174*
175* Quick exit if N = 0 or NRHS = 0.
176*
177 IF( n.LE.0 .OR. nrhs.LE.0 ) THEN
178 resid = zero
179 RETURN
180 END IF
181*
182* Exit with RESID = 1/EPS if ANORM = 0.
183*
184 eps = dlamch( 'Epsilon' )
185 anorm = zlanhb( '1', uplo, n, kd, a, lda, rwork )
186 IF( anorm.LE.zero ) THEN
187 resid = one / eps
188 RETURN
189 END IF
190*
191* Compute B - A*X
192*
193 DO 10 j = 1, nrhs
194 CALL zhbmv( uplo, n, kd, -cone, a, lda, x( 1, j ), 1, cone,
195 $ b( 1, j ), 1 )
196 10 CONTINUE
197*
198* Compute the maximum over the number of right hand sides of
199* norm( B - A*X ) / ( norm(A) * norm(X) * EPS )
200*
201 resid = zero
202 DO 20 j = 1, nrhs
203 bnorm = dzasum( n, b( 1, j ), 1 )
204 xnorm = dzasum( n, x( 1, j ), 1 )
205 IF( xnorm.LE.zero ) THEN
206 resid = one / eps
207 ELSE
208 resid = max( resid, ( ( bnorm / anorm ) / xnorm ) / eps )
209 END IF
210 20 CONTINUE
211*
212 RETURN
213*
214* End of ZPBT02
215*
216 END
subroutine zhbmv(uplo, n, k, alpha, a, lda, x, incx, beta, y, incy)
ZHBMV
Definition zhbmv.f:187
subroutine zpbt02(uplo, n, kd, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZPBT02
Definition zpbt02.f:136