OpenRadioss 2025.1.11
OpenRadioss project
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.LE. IF( ERR*SMLNUMXNORM ) THEN
251.GT. IF( XNORMZERO )
252 $ ERR = ERR / XNORM
253 ELSE
254.GT. IF( ERRZERO )
255 $ ERR = ONE / EPS
256 END IF
257.LE. IF( ERR*SMLNUMTNORM ) THEN
258.GT. IF( TNORMZERO )
259 $ ERR = ERR / TNORM
260 ELSE
261.GT. IF( ERRZERO )
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
float cmplx[2]
Definition pblas.h:136
subroutine caxpy(n, ca, cx, incx, cy, incy)
CAXPY
Definition caxpy.f:88
subroutine csscal(n, sa, cx, incx)
CSSCAL
Definition csscal.f:78
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
Definition ccopy.f:81
subroutine ctpmv(uplo, trans, diag, n, ap, x, incx)
CTPMV
Definition ctpmv.f:142
subroutine ctpt03(uplo, trans, diag, n, nrhs, ap, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
CTPT03
Definition ctpt03.f:162
#define max(a, b)
Definition macros.h:21