LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
ctpt03.f
Go to the documentation of this file.
1*> \brief \b CTPT03
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 CTPT03( UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM,
12* TSCAL, X, LDX, B, LDB, WORK, RESID )
13*
14* .. Scalar Arguments ..
15* CHARACTER DIAG, TRANS, UPLO
16* INTEGER LDB, LDX, N, NRHS
17* REAL RESID, SCALE, TSCAL
18* ..
19* .. Array Arguments ..
20* REAL CNORM( * )
21* COMPLEX AP( * ), B( LDB, * ), WORK( * ), X( LDX, * )
22* ..
23*
24*
25*> \par Purpose:
26* =============
27*>
28*> \verbatim
29*>
30*> CTPT03 computes the residual for the solution to a scaled triangular
31*> system of equations A*x = s*b, A**T *x = s*b, or A**H *x = s*b,
32*> when the triangular matrix A is stored in packed format. Here A**T
33*> denotes the transpose of A, A**H denotes the conjugate transpose of
34*> A, s is a scalar, and x and b are N by NRHS matrices. The test ratio
35*> is the maximum over the number of right hand sides of
36*> norm(s*b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
37*> where op(A) denotes A, A**T, or A**H, and EPS is the machine epsilon.
38*> \endverbatim
39*
40* Arguments:
41* ==========
42*
43*> \param[in] UPLO
44*> \verbatim
45*> UPLO is CHARACTER*1
46*> Specifies whether the matrix A is upper or lower triangular.
47*> = 'U': Upper triangular
48*> = 'L': Lower triangular
49*> \endverbatim
50*>
51*> \param[in] TRANS
52*> \verbatim
53*> TRANS is CHARACTER*1
54*> Specifies the operation applied to A.
55*> = 'N': A *x = s*b (No transpose)
56*> = 'T': A**T *x = s*b (Transpose)
57*> = 'C': A**H *x = s*b (Conjugate transpose)
58*> \endverbatim
59*>
60*> \param[in] DIAG
61*> \verbatim
62*> DIAG is CHARACTER*1
63*> Specifies whether or not the matrix A is unit triangular.
64*> = 'N': Non-unit triangular
65*> = 'U': Unit triangular
66*> \endverbatim
67*>
68*> \param[in] N
69*> \verbatim
70*> N is INTEGER
71*> The order of the matrix A. N >= 0.
72*> \endverbatim
73*>
74*> \param[in] NRHS
75*> \verbatim
76*> NRHS is INTEGER
77*> The number of right hand sides, i.e., the number of columns
78*> of the matrices X and B. NRHS >= 0.
79*> \endverbatim
80*>
81*> \param[in] AP
82*> \verbatim
83*> AP is COMPLEX array, dimension (N*(N+1)/2)
84*> The upper or lower triangular matrix A, packed columnwise in
85*> a linear array. The j-th column of A is stored in the array
86*> AP as follows:
87*> if UPLO = 'U', AP((j-1)*j/2 + i) = A(i,j) for 1<=i<=j;
88*> if UPLO = 'L',
89*> AP((j-1)*(n-j) + j*(j+1)/2 + i-j) = A(i,j) for j<=i<=n.
90*> \endverbatim
91*>
92*> \param[in] SCALE
93*> \verbatim
94*> SCALE is REAL
95*> The scaling factor s used in solving the triangular system.
96*> \endverbatim
97*>
98*> \param[in] CNORM
99*> \verbatim
100*> CNORM is REAL array, dimension (N)
101*> The 1-norms of the columns of A, not counting the diagonal.
102*> \endverbatim
103*>
104*> \param[in] TSCAL
105*> \verbatim
106*> TSCAL is REAL
107*> The scaling factor used in computing the 1-norms in CNORM.
108*> CNORM actually contains the column norms of TSCAL*A.
109*> \endverbatim
110*>
111*> \param[in] X
112*> \verbatim
113*> X is COMPLEX array, dimension (LDX,NRHS)
114*> The computed solution vectors for the system of linear
115*> equations.
116*> \endverbatim
117*>
118*> \param[in] LDX
119*> \verbatim
120*> LDX is INTEGER
121*> The leading dimension of the array X. LDX >= max(1,N).
122*> \endverbatim
123*>
124*> \param[in] B
125*> \verbatim
126*> B is COMPLEX array, dimension (LDB,NRHS)
127*> The right hand side vectors for the system of linear
128*> equations.
129*> \endverbatim
130*>
131*> \param[in] LDB
132*> \verbatim
133*> LDB is INTEGER
134*> The leading dimension of the array B. LDB >= max(1,N).
135*> \endverbatim
136*>
137*> \param[out] WORK
138*> \verbatim
139*> WORK is COMPLEX array, dimension (N)
140*> \endverbatim
141*>
142*> \param[out] RESID
143*> \verbatim
144*> RESID is REAL
145*> The maximum over the number of right hand sides of
146*> norm(op(A)*x - s*b) / ( norm(op(A)) * norm(x) * EPS ).
147*> \endverbatim
148*
149* Authors:
150* ========
151*
152*> \author Univ. of Tennessee
153*> \author Univ. of California Berkeley
154*> \author Univ. of Colorado Denver
155*> \author NAG Ltd.
156*
157*> \ingroup complex_lin
158*
159* =====================================================================
160 SUBROUTINE ctpt03( UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM,
161 $ TSCAL, X, LDX, B, LDB, WORK, RESID )
162*
163* -- LAPACK test routine --
164* -- LAPACK is a software package provided by Univ. of Tennessee, --
165* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
166*
167* .. Scalar Arguments ..
168 CHARACTER DIAG, TRANS, UPLO
169 INTEGER LDB, LDX, N, NRHS
170 REAL RESID, SCALE, TSCAL
171* ..
172* .. Array Arguments ..
173 REAL CNORM( * )
174 COMPLEX AP( * ), B( LDB, * ), WORK( * ), X( LDX, * )
175* ..
176*
177* =====================================================================
178*
179* .. Parameters ..
180 REAL ONE, ZERO
181 parameter( one = 1.0e+0, zero = 0.0e+0 )
182* ..
183* .. Local Scalars ..
184 INTEGER IX, J, JJ
185 REAL EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
186* ..
187* .. External Functions ..
188 LOGICAL LSAME
189 INTEGER ICAMAX
190 REAL SLAMCH
191 EXTERNAL lsame, icamax, slamch
192* ..
193* .. External Subroutines ..
194 EXTERNAL caxpy, ccopy, csscal, ctpmv
195* ..
196* .. Intrinsic Functions ..
197 INTRINSIC abs, cmplx, max, real
198* ..
199* .. Executable Statements ..
200*
201* Quick exit if N = 0.
202*
203 IF( n.LE.0 .OR. nrhs.LE.0 ) THEN
204 resid = zero
205 RETURN
206 END IF
207 eps = slamch( 'Epsilon' )
208 smlnum = slamch( 'Safe minimum' )
209*
210* Compute the norm of the triangular matrix A using the column
211* norms already computed by CLATPS.
212*
213 tnorm = 0.
214 IF( lsame( diag, 'N' ) ) THEN
215 IF( lsame( uplo, 'U' ) ) THEN
216 jj = 1
217 DO 10 j = 1, n
218 tnorm = max( tnorm, tscal*abs( ap( jj ) )+cnorm( j ) )
219 jj = jj + j + 1
220 10 CONTINUE
221 ELSE
222 jj = 1
223 DO 20 j = 1, n
224 tnorm = max( tnorm, tscal*abs( ap( jj ) )+cnorm( j ) )
225 jj = jj + n - j + 1
226 20 CONTINUE
227 END IF
228 ELSE
229 DO 30 j = 1, n
230 tnorm = max( tnorm, tscal+cnorm( j ) )
231 30 CONTINUE
232 END IF
233*
234* Compute the maximum over the number of right hand sides of
235* norm(op(A)*x - s*b) / ( norm(A) * norm(x) * EPS ).
236*
237 resid = zero
238 DO 40 j = 1, nrhs
239 CALL ccopy( n, x( 1, j ), 1, work, 1 )
240 ix = icamax( n, work, 1 )
241 xnorm = max( one, abs( x( ix, j ) ) )
242 xscal = ( one / xnorm ) / real( n )
243 CALL csscal( n, xscal, work, 1 )
244 CALL ctpmv( uplo, trans, diag, n, ap, work, 1 )
245 CALL caxpy( n, cmplx( -scale*xscal ), b( 1, j ), 1, work, 1 )
246 ix = icamax( n, work, 1 )
247 err = tscal*abs( work( ix ) )
248 ix = icamax( n, x( 1, j ), 1 )
249 xnorm = abs( x( ix, j ) )
250 IF( err*smlnum.LE.xnorm ) THEN
251 IF( xnorm.GT.zero )
252 $ err = err / xnorm
253 ELSE
254 IF( err.GT.zero )
255 $ err = one / eps
256 END IF
257 IF( err*smlnum.LE.tnorm ) THEN
258 IF( tnorm.GT.zero )
259 $ err = err / tnorm
260 ELSE
261 IF( err.GT.zero )
262 $ err = one / eps
263 END IF
264 resid = max( resid, err )
265 40 CONTINUE
266*
267 RETURN
268*
269* End of CTPT03
270*
271 END
subroutine ctpt03(uplo, trans, diag, n, nrhs, ap, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
CTPT03
Definition ctpt03.f:162
subroutine caxpy(n, ca, cx, incx, cy, incy)
CAXPY
Definition caxpy.f:88
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
Definition ccopy.f:81
subroutine csscal(n, sa, cx, incx)
CSSCAL
Definition csscal.f:78
subroutine ctpmv(uplo, trans, diag, n, ap, x, incx)
CTPMV
Definition ctpmv.f:142