1*> \brief \b ZERRPO
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 ZERRPO( PATH, NUNIT )
12*
13*       .. Scalar Arguments ..
14*       CHARACTER*3        PATH
15*       INTEGER            NUNIT
16*       ..
17*
18*
19*> \par Purpose:
20*  =============
21*>
22*> \verbatim
23*>
24*> ZERRPO tests the error exits for the COMPLEX*16 routines
25*> for Hermitian positive definite matrices.
26*> \endverbatim
27*
28*  Arguments:
29*  ==========
30*
31*> \param[in] PATH
32*> \verbatim
33*>          PATH is CHARACTER*3
34*>          The LAPACK path name for the routines to be tested.
35*> \endverbatim
36*>
37*> \param[in] NUNIT
38*> \verbatim
39*>          NUNIT is INTEGER
40*>          The unit number for output.
41*> \endverbatim
42*
43*  Authors:
44*  ========
45*
46*> \author Univ. of Tennessee
47*> \author Univ. of California Berkeley
48*> \author Univ. of Colorado Denver
49*> \author NAG Ltd.
50*
51*> \date November 2011
52*
53*> \ingroup complex16_lin
54*
55*  =====================================================================
56      SUBROUTINE ZERRPO( PATH, NUNIT )
57*
58*  -- LAPACK test routine (version 3.4.0) --
59*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
60*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
61*     November 2011
62*
63*     .. Scalar Arguments ..
64      CHARACTER*3        PATH
65      INTEGER            NUNIT
66*     ..
67*
68*  =====================================================================
69*
70*     .. Parameters ..
71      INTEGER            NMAX
72      PARAMETER          ( NMAX = 4 )
73*     ..
74*     .. Local Scalars ..
75      CHARACTER*2        C2
76      INTEGER            I, INFO, J
77      DOUBLE PRECISION   ANRM, RCOND
78*     ..
79*     .. Local Arrays ..
80      DOUBLE PRECISION   R( NMAX ), R1( NMAX ), R2( NMAX )
81      COMPLEX*16         A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
82     $                   W( 2*NMAX ), X( NMAX )
83*     ..
84*     .. External Functions ..
85      LOGICAL            LSAMEN
86      EXTERNAL           LSAMEN
87*     ..
88*     .. External Subroutines ..
89      EXTERNAL           ALAESM, CHKXER, ZPBCON, ZPBEQU, ZPBRFS, ZPBTF2,
90     $                   ZPBTRF, ZPBTRS, ZPOCON, ZPOEQU, ZPORFS, ZPOTF2,
91     $                   ZPOTRF, ZPOTRI, ZPOTRS, ZPPCON, ZPPEQU, ZPPRFS,
92     $                   ZPPTRF, ZPPTRI, ZPPTRS
93*     ..
94*     .. Scalars in Common ..
95      LOGICAL            LERR, OK
96      CHARACTER*32       SRNAMT
97      INTEGER            INFOT, NOUT
98*     ..
99*     .. Common blocks ..
100      COMMON             / INFOC / INFOT, NOUT, OK, LERR
101      COMMON             / SRNAMC / SRNAMT
102*     ..
103*     .. Intrinsic Functions ..
104      INTRINSIC          DBLE, DCMPLX
105*     ..
106*     .. Executable Statements ..
107*
108      NOUT = NUNIT
109      WRITE( NOUT, FMT = * )
110      C2 = PATH( 2: 3 )
111*
112*     Set the variables to innocuous values.
113*
114      DO 20 J = 1, NMAX
115         DO 10 I = 1, NMAX
116            A( I, J ) = DCMPLX( 1.D0 / DBLE( I+J ),
117     $                  -1.D0 / DBLE( I+J ) )
118            AF( I, J ) = DCMPLX( 1.D0 / DBLE( I+J ),
119     $                   -1.D0 / DBLE( I+J ) )
120   10    CONTINUE
121         B( J ) = 0.D0
122         R1( J ) = 0.D0
123         R2( J ) = 0.D0
124         W( J ) = 0.D0
125         X( J ) = 0.D0
126   20 CONTINUE
127      ANRM = 1.D0
128      OK = .TRUE.
129*
130*     Test error exits of the routines that use the Cholesky
131*     decomposition of a Hermitian positive definite matrix.
132*
133      IF( LSAMEN( 2, C2, 'PO' ) ) THEN
134*
135*        ZPOTRF
136*
137         SRNAMT = 'ZPOTRF'
138         INFOT = 1
139         CALL ZPOTRF( '/', 0, A, 1, INFO )
140         CALL CHKXER( 'ZPOTRF', INFOT, NOUT, LERR, OK )
141         INFOT = 2
142         CALL ZPOTRF( 'U', -1, A, 1, INFO )
143         CALL CHKXER( 'ZPOTRF', INFOT, NOUT, LERR, OK )
144         INFOT = 4
145         CALL ZPOTRF( 'U', 2, A, 1, INFO )
146         CALL CHKXER( 'ZPOTRF', INFOT, NOUT, LERR, OK )
147*
148*        ZPOTF2
149*
150         SRNAMT = 'ZPOTF2'
151         INFOT = 1
152         CALL ZPOTF2( '/', 0, A, 1, INFO )
153         CALL CHKXER( 'ZPOTF2', INFOT, NOUT, LERR, OK )
154         INFOT = 2
155         CALL ZPOTF2( 'U', -1, A, 1, INFO )
156         CALL CHKXER( 'ZPOTF2', INFOT, NOUT, LERR, OK )
157         INFOT = 4
158         CALL ZPOTF2( 'U', 2, A, 1, INFO )
159         CALL CHKXER( 'ZPOTF2', INFOT, NOUT, LERR, OK )
160*
161*        ZPOTRI
162*
163         SRNAMT = 'ZPOTRI'
164         INFOT = 1
165         CALL ZPOTRI( '/', 0, A, 1, INFO )
166         CALL CHKXER( 'ZPOTRI', INFOT, NOUT, LERR, OK )
167         INFOT = 2
168         CALL ZPOTRI( 'U', -1, A, 1, INFO )
169         CALL CHKXER( 'ZPOTRI', INFOT, NOUT, LERR, OK )
170         INFOT = 4
171         CALL ZPOTRI( 'U', 2, A, 1, INFO )
172         CALL CHKXER( 'ZPOTRI', INFOT, NOUT, LERR, OK )
173*
174*        ZPOTRS
175*
176         SRNAMT = 'ZPOTRS'
177         INFOT = 1
178         CALL ZPOTRS( '/', 0, 0, A, 1, B, 1, INFO )
179         CALL CHKXER( 'ZPOTRS', INFOT, NOUT, LERR, OK )
180         INFOT = 2
181         CALL ZPOTRS( 'U', -1, 0, A, 1, B, 1, INFO )
182         CALL CHKXER( 'ZPOTRS', INFOT, NOUT, LERR, OK )
183         INFOT = 3
184         CALL ZPOTRS( 'U', 0, -1, A, 1, B, 1, INFO )
185         CALL CHKXER( 'ZPOTRS', INFOT, NOUT, LERR, OK )
186         INFOT = 5
187         CALL ZPOTRS( 'U', 2, 1, A, 1, B, 2, INFO )
188         CALL CHKXER( 'ZPOTRS', INFOT, NOUT, LERR, OK )
189         INFOT = 7
190         CALL ZPOTRS( 'U', 2, 1, A, 2, B, 1, INFO )
191         CALL CHKXER( 'ZPOTRS', INFOT, NOUT, LERR, OK )
192*
193*        ZPORFS
194*
195         SRNAMT = 'ZPORFS'
196         INFOT = 1
197         CALL ZPORFS( '/', 0, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W, R,
198     $                INFO )
199         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
200         INFOT = 2
201         CALL ZPORFS( 'U', -1, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W, R,
202     $                INFO )
203         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
204         INFOT = 3
205         CALL ZPORFS( 'U', 0, -1, A, 1, AF, 1, B, 1, X, 1, R1, R2, W, R,
206     $                INFO )
207         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
208         INFOT = 5
209         CALL ZPORFS( 'U', 2, 1, A, 1, AF, 2, B, 2, X, 2, R1, R2, W, R,
210     $                INFO )
211         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
212         INFOT = 7
213         CALL ZPORFS( 'U', 2, 1, A, 2, AF, 1, B, 2, X, 2, R1, R2, W, R,
214     $                INFO )
215         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
216         INFOT = 9
217         CALL ZPORFS( 'U', 2, 1, A, 2, AF, 2, B, 1, X, 2, R1, R2, W, R,
218     $                INFO )
219         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
220         INFOT = 11
221         CALL ZPORFS( 'U', 2, 1, A, 2, AF, 2, B, 2, X, 1, R1, R2, W, R,
222     $                INFO )
223         CALL CHKXER( 'ZPORFS', INFOT, NOUT, LERR, OK )
224*
225*        ZPOCON
226*
227         SRNAMT = 'ZPOCON'
228         INFOT = 1
229         CALL ZPOCON( '/', 0, A, 1, ANRM, RCOND, W, R, INFO )
230         CALL CHKXER( 'ZPOCON', INFOT, NOUT, LERR, OK )
231         INFOT = 2
232         CALL ZPOCON( 'U', -1, A, 1, ANRM, RCOND, W, R, INFO )
233         CALL CHKXER( 'ZPOCON', INFOT, NOUT, LERR, OK )
234         INFOT = 4
235         CALL ZPOCON( 'U', 2, A, 1, ANRM, RCOND, W, R, INFO )
236         CALL CHKXER( 'ZPOCON', INFOT, NOUT, LERR, OK )
237         INFOT = 5
238         CALL ZPOCON( 'U', 1, A, 1, -ANRM, RCOND, W, R, INFO )
239         CALL CHKXER( 'ZPOCON', INFOT, NOUT, LERR, OK )
240*
241*        ZPOEQU
242*
243         SRNAMT = 'ZPOEQU'
244         INFOT = 1
245         CALL ZPOEQU( -1, A, 1, R1, RCOND, ANRM, INFO )
246         CALL CHKXER( 'ZPOEQU', INFOT, NOUT, LERR, OK )
247         INFOT = 3
248         CALL ZPOEQU( 2, A, 1, R1, RCOND, ANRM, INFO )
249         CALL CHKXER( 'ZPOEQU', INFOT, NOUT, LERR, OK )
250*
251*     Test error exits of the routines that use the Cholesky
252*     decomposition of a Hermitian positive definite packed matrix.
253*
254      ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN
255*
256*        ZPPTRF
257*
258         SRNAMT = 'ZPPTRF'
259         INFOT = 1
260         CALL ZPPTRF( '/', 0, A, INFO )
261         CALL CHKXER( 'ZPPTRF', INFOT, NOUT, LERR, OK )
262         INFOT = 2
263         CALL ZPPTRF( 'U', -1, A, INFO )
264         CALL CHKXER( 'ZPPTRF', INFOT, NOUT, LERR, OK )
265*
266*        ZPPTRI
267*
268         SRNAMT = 'ZPPTRI'
269         INFOT = 1
270         CALL ZPPTRI( '/', 0, A, INFO )
271         CALL CHKXER( 'ZPPTRI', INFOT, NOUT, LERR, OK )
272         INFOT = 2
273         CALL ZPPTRI( 'U', -1, A, INFO )
274         CALL CHKXER( 'ZPPTRI', INFOT, NOUT, LERR, OK )
275*
276*        ZPPTRS
277*
278         SRNAMT = 'ZPPTRS'
279         INFOT = 1
280         CALL ZPPTRS( '/', 0, 0, A, B, 1, INFO )
281         CALL CHKXER( 'ZPPTRS', INFOT, NOUT, LERR, OK )
282         INFOT = 2
283         CALL ZPPTRS( 'U', -1, 0, A, B, 1, INFO )
284         CALL CHKXER( 'ZPPTRS', INFOT, NOUT, LERR, OK )
285         INFOT = 3
286         CALL ZPPTRS( 'U', 0, -1, A, B, 1, INFO )
287         CALL CHKXER( 'ZPPTRS', INFOT, NOUT, LERR, OK )
288         INFOT = 6
289         CALL ZPPTRS( 'U', 2, 1, A, B, 1, INFO )
290         CALL CHKXER( 'ZPPTRS', INFOT, NOUT, LERR, OK )
291*
292*        ZPPRFS
293*
294         SRNAMT = 'ZPPRFS'
295         INFOT = 1
296         CALL ZPPRFS( '/', 0, 0, A, AF, B, 1, X, 1, R1, R2, W, R, INFO )
297         CALL CHKXER( 'ZPPRFS', INFOT, NOUT, LERR, OK )
298         INFOT = 2
299         CALL ZPPRFS( 'U', -1, 0, A, AF, B, 1, X, 1, R1, R2, W, R,
300     $                INFO )
301         CALL CHKXER( 'ZPPRFS', INFOT, NOUT, LERR, OK )
302         INFOT = 3
303         CALL ZPPRFS( 'U', 0, -1, A, AF, B, 1, X, 1, R1, R2, W, R,
304     $                INFO )
305         CALL CHKXER( 'ZPPRFS', INFOT, NOUT, LERR, OK )
306         INFOT = 7
307         CALL ZPPRFS( 'U', 2, 1, A, AF, B, 1, X, 2, R1, R2, W, R, INFO )
308         CALL CHKXER( 'ZPPRFS', INFOT, NOUT, LERR, OK )
309         INFOT = 9
310         CALL ZPPRFS( 'U', 2, 1, A, AF, B, 2, X, 1, R1, R2, W, R, INFO )
311         CALL CHKXER( 'ZPPRFS', INFOT, NOUT, LERR, OK )
312*
313*        ZPPCON
314*
315         SRNAMT = 'ZPPCON'
316         INFOT = 1
317         CALL ZPPCON( '/', 0, A, ANRM, RCOND, W, R, INFO )
318         CALL CHKXER( 'ZPPCON', INFOT, NOUT, LERR, OK )
319         INFOT = 2
320         CALL ZPPCON( 'U', -1, A, ANRM, RCOND, W, R, INFO )
321         CALL CHKXER( 'ZPPCON', INFOT, NOUT, LERR, OK )
322         INFOT = 4
323         CALL ZPPCON( 'U', 1, A, -ANRM, RCOND, W, R, INFO )
324         CALL CHKXER( 'ZPPCON', INFOT, NOUT, LERR, OK )
325*
326*        ZPPEQU
327*
328         SRNAMT = 'ZPPEQU'
329         INFOT = 1
330         CALL ZPPEQU( '/', 0, A, R1, RCOND, ANRM, INFO )
331         CALL CHKXER( 'ZPPEQU', INFOT, NOUT, LERR, OK )
332         INFOT = 2
333         CALL ZPPEQU( 'U', -1, A, R1, RCOND, ANRM, INFO )
334         CALL CHKXER( 'ZPPEQU', INFOT, NOUT, LERR, OK )
335*
336*     Test error exits of the routines that use the Cholesky
337*     decomposition of a Hermitian positive definite band matrix.
338*
339      ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
340*
341*        ZPBTRF
342*
343         SRNAMT = 'ZPBTRF'
344         INFOT = 1
345         CALL ZPBTRF( '/', 0, 0, A, 1, INFO )
346         CALL CHKXER( 'ZPBTRF', INFOT, NOUT, LERR, OK )
347         INFOT = 2
348         CALL ZPBTRF( 'U', -1, 0, A, 1, INFO )
349         CALL CHKXER( 'ZPBTRF', INFOT, NOUT, LERR, OK )
350         INFOT = 3
351         CALL ZPBTRF( 'U', 1, -1, A, 1, INFO )
352         CALL CHKXER( 'ZPBTRF', INFOT, NOUT, LERR, OK )
353         INFOT = 5
354         CALL ZPBTRF( 'U', 2, 1, A, 1, INFO )
355         CALL CHKXER( 'ZPBTRF', INFOT, NOUT, LERR, OK )
356*
357*        ZPBTF2
358*
359         SRNAMT = 'ZPBTF2'
360         INFOT = 1
361         CALL ZPBTF2( '/', 0, 0, A, 1, INFO )
362         CALL CHKXER( 'ZPBTF2', INFOT, NOUT, LERR, OK )
363         INFOT = 2
364         CALL ZPBTF2( 'U', -1, 0, A, 1, INFO )
365         CALL CHKXER( 'ZPBTF2', INFOT, NOUT, LERR, OK )
366         INFOT = 3
367         CALL ZPBTF2( 'U', 1, -1, A, 1, INFO )
368         CALL CHKXER( 'ZPBTF2', INFOT, NOUT, LERR, OK )
369         INFOT = 5
370         CALL ZPBTF2( 'U', 2, 1, A, 1, INFO )
371         CALL CHKXER( 'ZPBTF2', INFOT, NOUT, LERR, OK )
372*
373*        ZPBTRS
374*
375         SRNAMT = 'ZPBTRS'
376         INFOT = 1
377         CALL ZPBTRS( '/', 0, 0, 0, A, 1, B, 1, INFO )
378         CALL CHKXER( 'ZPBTRS', INFOT, NOUT, LERR, OK )
379         INFOT = 2
380         CALL ZPBTRS( 'U', -1, 0, 0, A, 1, B, 1, INFO )
381         CALL CHKXER( 'ZPBTRS', INFOT, NOUT, LERR, OK )
382         INFOT = 3
383         CALL ZPBTRS( 'U', 1, -1, 0, A, 1, B, 1, INFO )
384         CALL CHKXER( 'ZPBTRS', INFOT, NOUT, LERR, OK )
385         INFOT = 4
386         CALL ZPBTRS( 'U', 0, 0, -1, A, 1, B, 1, INFO )
387         CALL CHKXER( 'ZPBTRS', INFOT, NOUT, LERR, OK )
388         INFOT = 6
389         CALL ZPBTRS( 'U', 2, 1, 1, A, 1, B, 1, INFO )
390         CALL CHKXER( 'ZPBTRS', INFOT, NOUT, LERR, OK )
391         INFOT = 8
392         CALL ZPBTRS( 'U', 2, 0, 1, A, 1, B, 1, INFO )
393         CALL CHKXER( 'ZPBTRS', INFOT, NOUT, LERR, OK )
394*
395*        ZPBRFS
396*
397         SRNAMT = 'ZPBRFS'
398         INFOT = 1
399         CALL ZPBRFS( '/', 0, 0, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
400     $                R, INFO )
401         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
402         INFOT = 2
403         CALL ZPBRFS( 'U', -1, 0, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
404     $                R, INFO )
405         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
406         INFOT = 3
407         CALL ZPBRFS( 'U', 1, -1, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
408     $                R, INFO )
409         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
410         INFOT = 4
411         CALL ZPBRFS( 'U', 0, 0, -1, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
412     $                R, INFO )
413         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
414         INFOT = 6
415         CALL ZPBRFS( 'U', 2, 1, 1, A, 1, AF, 2, B, 2, X, 2, R1, R2, W,
416     $                R, INFO )
417         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
418         INFOT = 8
419         CALL ZPBRFS( 'U', 2, 1, 1, A, 2, AF, 1, B, 2, X, 2, R1, R2, W,
420     $                R, INFO )
421         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
422         INFOT = 10
423         CALL ZPBRFS( 'U', 2, 0, 1, A, 1, AF, 1, B, 1, X, 2, R1, R2, W,
424     $                R, INFO )
425         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
426         INFOT = 12
427         CALL ZPBRFS( 'U', 2, 0, 1, A, 1, AF, 1, B, 2, X, 1, R1, R2, W,
428     $                R, INFO )
429         CALL CHKXER( 'ZPBRFS', INFOT, NOUT, LERR, OK )
430*
431*        ZPBCON
432*
433         SRNAMT = 'ZPBCON'
434         INFOT = 1
435         CALL ZPBCON( '/', 0, 0, A, 1, ANRM, RCOND, W, R, INFO )
436         CALL CHKXER( 'ZPBCON', INFOT, NOUT, LERR, OK )
437         INFOT = 2
438         CALL ZPBCON( 'U', -1, 0, A, 1, ANRM, RCOND, W, R, INFO )
439         CALL CHKXER( 'ZPBCON', INFOT, NOUT, LERR, OK )
440         INFOT = 3
441         CALL ZPBCON( 'U', 1, -1, A, 1, ANRM, RCOND, W, R, INFO )
442         CALL CHKXER( 'ZPBCON', INFOT, NOUT, LERR, OK )
443         INFOT = 5
444         CALL ZPBCON( 'U', 2, 1, A, 1, ANRM, RCOND, W, R, INFO )
445         CALL CHKXER( 'ZPBCON', INFOT, NOUT, LERR, OK )
446         INFOT = 6
447         CALL ZPBCON( 'U', 1, 0, A, 1, -ANRM, RCOND, W, R, INFO )
448         CALL CHKXER( 'ZPBCON', INFOT, NOUT, LERR, OK )
449*
450*        ZPBEQU
451*
452         SRNAMT = 'ZPBEQU'
453         INFOT = 1
454         CALL ZPBEQU( '/', 0, 0, A, 1, R1, RCOND, ANRM, INFO )
455         CALL CHKXER( 'ZPBEQU', INFOT, NOUT, LERR, OK )
456         INFOT = 2
457         CALL ZPBEQU( 'U', -1, 0, A, 1, R1, RCOND, ANRM, INFO )
458         CALL CHKXER( 'ZPBEQU', INFOT, NOUT, LERR, OK )
459         INFOT = 3
460         CALL ZPBEQU( 'U', 1, -1, A, 1, R1, RCOND, ANRM, INFO )
461         CALL CHKXER( 'ZPBEQU', INFOT, NOUT, LERR, OK )
462         INFOT = 5
463         CALL ZPBEQU( 'U', 2, 1, A, 1, R1, RCOND, ANRM, INFO )
464         CALL CHKXER( 'ZPBEQU', INFOT, NOUT, LERR, OK )
465      END IF
466*
467*     Print a summary line.
468*
469      CALL ALAESM( PATH, OK, NOUT )
470*
471      RETURN
472*
473*     End of ZERRPO
474*
475      END
476