LAPACK  3.10.1
LAPACK: Linear Algebra PACKage
cchkps.f
Go to the documentation of this file.
1 *> \brief \b CCHKPS
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 CCHKPS( DOTYPE, NN, NVAL, NNB, NBVAL, NRANK, RANKVAL,
12 * THRESH, TSTERR, NMAX, A, AFAC, PERM, PIV, WORK,
13 * RWORK, NOUT )
14 *
15 * .. Scalar Arguments ..
16 * REAL THRESH
17 * INTEGER NMAX, NN, NNB, NOUT, NRANK
18 * LOGICAL TSTERR
19 * ..
20 * .. Array Arguments ..
21 * COMPLEX A( * ), AFAC( * ), PERM( * ), WORK( * )
22 * REAL RWORK( * )
23 * INTEGER NBVAL( * ), NVAL( * ), PIV( * ), RANKVAL( * )
24 * LOGICAL DOTYPE( * )
25 * ..
26 *
27 *
28 *> \par Purpose:
29 * =============
30 *>
31 *> \verbatim
32 *>
33 *> CCHKPS tests CPSTRF.
34 *> \endverbatim
35 *
36 * Arguments:
37 * ==========
38 *
39 *> \param[in] DOTYPE
40 *> \verbatim
41 *> DOTYPE is LOGICAL array, dimension (NTYPES)
42 *> The matrix types to be used for testing. Matrices of type j
43 *> (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
44 *> .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.
45 *> \endverbatim
46 *>
47 *> \param[in] NN
48 *> \verbatim
49 *> NN is INTEGER
50 *> The number of values of N contained in the vector NVAL.
51 *> \endverbatim
52 *>
53 *> \param[in] NVAL
54 *> \verbatim
55 *> NVAL is INTEGER array, dimension (NN)
56 *> The values of the matrix dimension N.
57 *> \endverbatim
58 *>
59 *> \param[in] NNB
60 *> \verbatim
61 *> NNB is INTEGER
62 *> The number of values of NB contained in the vector NBVAL.
63 *> \endverbatim
64 *>
65 *> \param[in] NBVAL
66 *> \verbatim
67 *> NBVAL is INTEGER array, dimension (NNB)
68 *> The values of the block size NB.
69 *> \endverbatim
70 *>
71 *> \param[in] NRANK
72 *> \verbatim
73 *> NRANK is INTEGER
74 *> The number of values of RANK contained in the vector RANKVAL.
75 *> \endverbatim
76 *>
77 *> \param[in] RANKVAL
78 *> \verbatim
79 *> RANKVAL is INTEGER array, dimension (NBVAL)
80 *> The values of the block size NB.
81 *> \endverbatim
82 *>
83 *> \param[in] THRESH
84 *> \verbatim
85 *> THRESH is REAL
86 *> The threshold value for the test ratios. A result is
87 *> included in the output file if RESULT >= THRESH. To have
88 *> every test ratio printed, use THRESH = 0.
89 *> \endverbatim
90 *>
91 *> \param[in] TSTERR
92 *> \verbatim
93 *> TSTERR is LOGICAL
94 *> Flag that indicates whether error exits are to be tested.
95 *> \endverbatim
96 *>
97 *> \param[in] NMAX
98 *> \verbatim
99 *> NMAX is INTEGER
100 *> The maximum value permitted for N, used in dimensioning the
101 *> work arrays.
102 *> \endverbatim
103 *>
104 *> \param[out] A
105 *> \verbatim
106 *> A is COMPLEX array, dimension (NMAX*NMAX)
107 *> \endverbatim
108 *>
109 *> \param[out] AFAC
110 *> \verbatim
111 *> AFAC is COMPLEX array, dimension (NMAX*NMAX)
112 *> \endverbatim
113 *>
114 *> \param[out] PERM
115 *> \verbatim
116 *> PERM is COMPLEX array, dimension (NMAX*NMAX)
117 *> \endverbatim
118 *>
119 *> \param[out] PIV
120 *> \verbatim
121 *> PIV is INTEGER array, dimension (NMAX)
122 *> \endverbatim
123 *>
124 *> \param[out] WORK
125 *> \verbatim
126 *> WORK is COMPLEX array, dimension (NMAX*3)
127 *> \endverbatim
128 *>
129 *> \param[out] RWORK
130 *> \verbatim
131 *> RWORK is REAL array, dimension (NMAX)
132 *> \endverbatim
133 *>
134 *> \param[in] NOUT
135 *> \verbatim
136 *> NOUT is INTEGER
137 *> The unit number for output.
138 *> \endverbatim
139 *
140 * Authors:
141 * ========
142 *
143 *> \author Univ. of Tennessee
144 *> \author Univ. of California Berkeley
145 *> \author Univ. of Colorado Denver
146 *> \author NAG Ltd.
147 *
148 *> \ingroup complex_lin
149 *
150 * =====================================================================
151  SUBROUTINE cchkps( DOTYPE, NN, NVAL, NNB, NBVAL, NRANK, RANKVAL,
152  $ THRESH, TSTERR, NMAX, A, AFAC, PERM, PIV, WORK,
153  $ RWORK, NOUT )
154 *
155 * -- LAPACK test routine --
156 * -- LAPACK is a software package provided by Univ. of Tennessee, --
157 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
158 *
159 * .. Scalar Arguments ..
160  REAL THRESH
161  INTEGER NMAX, NN, NNB, NOUT, NRANK
162  LOGICAL TSTERR
163 * ..
164 * .. Array Arguments ..
165  COMPLEX A( * ), AFAC( * ), PERM( * ), WORK( * )
166  REAL RWORK( * )
167  INTEGER NBVAL( * ), NVAL( * ), PIV( * ), RANKVAL( * )
168  LOGICAL DOTYPE( * )
169 * ..
170 *
171 * =====================================================================
172 *
173 * .. Parameters ..
174  REAL ONE
175  PARAMETER ( ONE = 1.0e+0 )
176  INTEGER NTYPES
177  parameter( ntypes = 9 )
178 * ..
179 * .. Local Scalars ..
180  REAL ANORM, CNDNUM, RESULT, TOL
181  INTEGER COMPRANK, I, IMAT, IN, INB, INFO, IRANK, IUPLO,
182  $ izero, kl, ku, lda, mode, n, nb, nerrs, nfail,
183  $ nimat, nrun, rank, rankdiff
184  CHARACTER DIST, TYPE, UPLO
185  CHARACTER*3 PATH
186 * ..
187 * .. Local Arrays ..
188  INTEGER ISEED( 4 ), ISEEDY( 4 )
189  CHARACTER UPLOS( 2 )
190 * ..
191 * .. External Subroutines ..
192  EXTERNAL alaerh, alahd, alasum, cerrps, clacpy,
194 * ..
195 * .. Scalars in Common ..
196  INTEGER INFOT, NUNIT
197  LOGICAL LERR, OK
198  CHARACTER*32 SRNAMT
199 * ..
200 * .. Common blocks ..
201  COMMON / infoc / infot, nunit, ok, lerr
202  COMMON / srnamc / srnamt
203 * ..
204 * .. Intrinsic Functions ..
205  INTRINSIC max, real, ceiling
206 * ..
207 * .. Data statements ..
208  DATA iseedy / 1988, 1989, 1990, 1991 /
209  DATA uplos / 'U', 'L' /
210 * ..
211 * .. Executable Statements ..
212 *
213 * Initialize constants and the random number seed.
214 *
215  path( 1: 1 ) = 'Complex Precision'
216  path( 2: 3 ) = 'PS'
217  nrun = 0
218  nfail = 0
219  nerrs = 0
220  DO 100 i = 1, 4
221  iseed( i ) = iseedy( i )
222  100 CONTINUE
223 *
224 * Test the error exits
225 *
226  IF( tsterr )
227  $ CALL cerrps( path, nout )
228  infot = 0
229 *
230 * Do for each value of N in NVAL
231 *
232  DO 150 in = 1, nn
233  n = nval( in )
234  lda = max( n, 1 )
235  nimat = ntypes
236  IF( n.LE.0 )
237  $ nimat = 1
238 *
239  izero = 0
240  DO 140 imat = 1, nimat
241 *
242 * Do the tests only if DOTYPE( IMAT ) is true.
243 *
244  IF( .NOT.dotype( imat ) )
245  $ GO TO 140
246 *
247 * Do for each value of RANK in RANKVAL
248 *
249  DO 130 irank = 1, nrank
250 *
251 * Only repeat test 3 to 5 for different ranks
252 * Other tests use full rank
253 *
254  IF( ( imat.LT.3 .OR. imat.GT.5 ) .AND. irank.GT.1 )
255  $ GO TO 130
256 *
257  rank = ceiling( ( n * real( rankval( irank ) ) )
258  $ / 100.e+0 )
259 *
260 *
261 * Do first for UPLO = 'U', then for UPLO = 'L'
262 *
263  DO 120 iuplo = 1, 2
264  uplo = uplos( iuplo )
265 *
266 * Set up parameters with CLATB5 and generate a test matrix
267 * with CLATMT.
268 *
269  CALL clatb5( path, imat, n, TYPE, kl, ku, anorm,
270  $ mode, cndnum, dist )
271 *
272  srnamt = 'CLATMT'
273  CALL clatmt( n, n, dist, iseed, TYPE, rwork, mode,
274  $ cndnum, anorm, rank, kl, ku, uplo, a,
275  $ lda, work, info )
276 *
277 * Check error code from CLATMT.
278 *
279  IF( info.NE.0 ) THEN
280  CALL alaerh( path, 'CLATMT', info, 0, uplo, n,
281  $ n, -1, -1, -1, imat, nfail, nerrs,
282  $ nout )
283  GO TO 120
284  END IF
285 *
286 * Do for each value of NB in NBVAL
287 *
288  DO 110 inb = 1, nnb
289  nb = nbval( inb )
290  CALL xlaenv( 1, nb )
291 *
292 * Compute the pivoted L*L' or U'*U factorization
293 * of the matrix.
294 *
295  CALL clacpy( uplo, n, n, a, lda, afac, lda )
296  srnamt = 'CPSTRF'
297 *
298 * Use default tolerance
299 *
300  tol = -one
301  CALL cpstrf( uplo, n, afac, lda, piv, comprank,
302  $ tol, rwork, info )
303 *
304 * Check error code from CPSTRF.
305 *
306  IF( (info.LT.izero)
307  $ .OR.(info.NE.izero.AND.rank.EQ.n)
308  $ .OR.(info.LE.izero.AND.rank.LT.n) ) THEN
309  CALL alaerh( path, 'CPSTRF', info, izero,
310  $ uplo, n, n, -1, -1, nb, imat,
311  $ nfail, nerrs, nout )
312  GO TO 110
313  END IF
314 *
315 * Skip the test if INFO is not 0.
316 *
317  IF( info.NE.0 )
318  $ GO TO 110
319 *
320 * Reconstruct matrix from factors and compute residual.
321 *
322 * PERM holds permuted L*L^T or U^T*U
323 *
324  CALL cpst01( uplo, n, a, lda, afac, lda, perm, lda,
325  $ piv, rwork, result, comprank )
326 *
327 * Print information about the tests that did not pass
328 * the threshold or where computed rank was not RANK.
329 *
330  IF( n.EQ.0 )
331  $ comprank = 0
332  rankdiff = rank - comprank
333  IF( result.GE.thresh ) THEN
334  IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
335  $ CALL alahd( nout, path )
336  WRITE( nout, fmt = 9999 )uplo, n, rank,
337  $ rankdiff, nb, imat, result
338  nfail = nfail + 1
339  END IF
340  nrun = nrun + 1
341  110 CONTINUE
342 *
343  120 CONTINUE
344  130 CONTINUE
345  140 CONTINUE
346  150 CONTINUE
347 *
348 * Print a summary of the results.
349 *
350  CALL alasum( path, nout, nfail, nrun, nerrs )
351 *
352  9999 FORMAT( ' UPLO = ''', a1, ''', N =', i5, ', RANK =', i3,
353  $ ', Diff =', i5, ', NB =', i4, ', type ', i2, ', Ratio =',
354  $ g12.5 )
355  RETURN
356 *
357 * End of CCHKPS
358 *
359  END
subroutine alasum(TYPE, NOUT, NFAIL, NRUN, NERRS)
ALASUM
Definition: alasum.f:73
subroutine xlaenv(ISPEC, NVALUE)
XLAENV
Definition: xlaenv.f:81
subroutine alahd(IOUNIT, PATH)
ALAHD
Definition: alahd.f:107
subroutine alaerh(PATH, SUBNAM, INFO, INFOE, OPTS, M, N, KL, KU, N5, IMAT, NFAIL, NERRS, NOUT)
ALAERH
Definition: alaerh.f:147
subroutine cchkps(DOTYPE, NN, NVAL, NNB, NBVAL, NRANK, RANKVAL, THRESH, TSTERR, NMAX, A, AFAC, PERM, PIV, WORK, RWORK, NOUT)
CCHKPS
Definition: cchkps.f:154
subroutine cpst01(UPLO, N, A, LDA, AFAC, LDAFAC, PERM, LDPERM, PIV, RWORK, RESID, RANK)
CPST01
Definition: cpst01.f:136
subroutine cerrps(PATH, NUNIT)
CERRPS
Definition: cerrps.f:55
subroutine clatb5(PATH, IMAT, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
CLATB5
Definition: clatb5.f:114
subroutine clatmt(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, RANK, KL, KU, PACK, A, LDA, WORK, INFO)
CLATMT
Definition: clatmt.f:340
subroutine clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
Definition: clacpy.f:103
subroutine cpstrf(UPLO, N, A, LDA, PIV, RANK, TOL, WORK, INFO)
CPSTRF computes the Cholesky factorization with complete pivoting of complex Hermitian positive semid...
Definition: cpstrf.f:142