1*> \brief \b ZERRGE
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 ZERRGE( 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*> ZERRGE tests the error exits for the COMPLEX*16 routines
25*> for general 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 ZERRGE( 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, CCOND, RCOND
78*     ..
79*     .. Local Arrays ..
80      INTEGER            IP( NMAX )
81      DOUBLE PRECISION   R( NMAX ), R1( NMAX ), R2( NMAX )
82      COMPLEX*16         A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
83     $                   W( 2*NMAX ), X( NMAX )
84*     ..
85*     .. External Functions ..
86      LOGICAL            LSAMEN
87      EXTERNAL           LSAMEN
88*     ..
89*     .. External Subroutines ..
90      EXTERNAL           ALAESM, CHKXER, ZGBCON, ZGBEQU, ZGBRFS, ZGBTF2,
91     $                   ZGBTRF, ZGBTRS, ZGECON, ZGEEQU, ZGERFS, ZGETF2,
92     $                   ZGETRF, ZGETRI, ZGETRS
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         IP( J ) = J
127   20 CONTINUE
128      OK = .TRUE.
129*
130*     Test error exits of the routines that use the LU decomposition
131*     of a general matrix.
132*
133      IF( LSAMEN( 2, C2, 'GE' ) ) THEN
134*
135*        ZGETRF
136*
137         SRNAMT = 'ZGETRF'
138         INFOT = 1
139         CALL ZGETRF( -1, 0, A, 1, IP, INFO )
140         CALL CHKXER( 'ZGETRF', INFOT, NOUT, LERR, OK )
141         INFOT = 2
142         CALL ZGETRF( 0, -1, A, 1, IP, INFO )
143         CALL CHKXER( 'ZGETRF', INFOT, NOUT, LERR, OK )
144         INFOT = 4
145         CALL ZGETRF( 2, 1, A, 1, IP, INFO )
146         CALL CHKXER( 'ZGETRF', INFOT, NOUT, LERR, OK )
147*
148*        ZGETF2
149*
150         SRNAMT = 'ZGETF2'
151         INFOT = 1
152         CALL ZGETF2( -1, 0, A, 1, IP, INFO )
153         CALL CHKXER( 'ZGETF2', INFOT, NOUT, LERR, OK )
154         INFOT = 2
155         CALL ZGETF2( 0, -1, A, 1, IP, INFO )
156         CALL CHKXER( 'ZGETF2', INFOT, NOUT, LERR, OK )
157         INFOT = 4
158         CALL ZGETF2( 2, 1, A, 1, IP, INFO )
159         CALL CHKXER( 'ZGETF2', INFOT, NOUT, LERR, OK )
160*
161*        ZGETRI
162*
163         SRNAMT = 'ZGETRI'
164         INFOT = 1
165         CALL ZGETRI( -1, A, 1, IP, W, 1, INFO )
166         CALL CHKXER( 'ZGETRI', INFOT, NOUT, LERR, OK )
167         INFOT = 3
168         CALL ZGETRI( 2, A, 1, IP, W, 2, INFO )
169         CALL CHKXER( 'ZGETRI', INFOT, NOUT, LERR, OK )
170         INFOT = 6
171         CALL ZGETRI( 2, A, 2, IP, W, 1, INFO )
172         CALL CHKXER( 'ZGETRI', INFOT, NOUT, LERR, OK )
173*
174*        ZGETRS
175*
176         SRNAMT = 'ZGETRS'
177         INFOT = 1
178         CALL ZGETRS( '/', 0, 0, A, 1, IP, B, 1, INFO )
179         CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
180         INFOT = 2
181         CALL ZGETRS( 'N', -1, 0, A, 1, IP, B, 1, INFO )
182         CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
183         INFOT = 3
184         CALL ZGETRS( 'N', 0, -1, A, 1, IP, B, 1, INFO )
185         CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
186         INFOT = 5
187         CALL ZGETRS( 'N', 2, 1, A, 1, IP, B, 2, INFO )
188         CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
189         INFOT = 8
190         CALL ZGETRS( 'N', 2, 1, A, 2, IP, B, 1, INFO )
191         CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
192*
193*        ZGERFS
194*
195         SRNAMT = 'ZGERFS'
196         INFOT = 1
197         CALL ZGERFS( '/', 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2, W,
198     $                R, INFO )
199         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
200         INFOT = 2
201         CALL ZGERFS( 'N', -1, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
202     $                W, R, INFO )
203         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
204         INFOT = 3
205         CALL ZGERFS( 'N', 0, -1, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
206     $                W, R, INFO )
207         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
208         INFOT = 5
209         CALL ZGERFS( 'N', 2, 1, A, 1, AF, 2, IP, B, 2, X, 2, R1, R2, W,
210     $                R, INFO )
211         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
212         INFOT = 7
213         CALL ZGERFS( 'N', 2, 1, A, 2, AF, 1, IP, B, 2, X, 2, R1, R2, W,
214     $                R, INFO )
215         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
216         INFOT = 10
217         CALL ZGERFS( 'N', 2, 1, A, 2, AF, 2, IP, B, 1, X, 2, R1, R2, W,
218     $                R, INFO )
219         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
220         INFOT = 12
221         CALL ZGERFS( 'N', 2, 1, A, 2, AF, 2, IP, B, 2, X, 1, R1, R2, W,
222     $                R, INFO )
223         CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
224*
225*        ZGECON
226*
227         SRNAMT = 'ZGECON'
228         INFOT = 1
229         CALL ZGECON( '/', 0, A, 1, ANRM, RCOND, W, R, INFO )
230         CALL CHKXER( 'ZGECON', INFOT, NOUT, LERR, OK )
231         INFOT = 2
232         CALL ZGECON( '1', -1, A, 1, ANRM, RCOND, W, R, INFO )
233         CALL CHKXER( 'ZGECON', INFOT, NOUT, LERR, OK )
234         INFOT = 4
235         CALL ZGECON( '1', 2, A, 1, ANRM, RCOND, W, R, INFO )
236         CALL CHKXER( 'ZGECON', INFOT, NOUT, LERR, OK )
237*
238*        ZGEEQU
239*
240         SRNAMT = 'ZGEEQU'
241         INFOT = 1
242         CALL ZGEEQU( -1, 0, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
243         CALL CHKXER( 'ZGEEQU', INFOT, NOUT, LERR, OK )
244         INFOT = 2
245         CALL ZGEEQU( 0, -1, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
246         CALL CHKXER( 'ZGEEQU', INFOT, NOUT, LERR, OK )
247         INFOT = 4
248         CALL ZGEEQU( 2, 2, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
249         CALL CHKXER( 'ZGEEQU', INFOT, NOUT, LERR, OK )
250*
251*     Test error exits of the routines that use the LU decomposition
252*     of a general band matrix.
253*
254      ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
255*
256*        ZGBTRF
257*
258         SRNAMT = 'ZGBTRF'
259         INFOT = 1
260         CALL ZGBTRF( -1, 0, 0, 0, A, 1, IP, INFO )
261         CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
262         INFOT = 2
263         CALL ZGBTRF( 0, -1, 0, 0, A, 1, IP, INFO )
264         CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
265         INFOT = 3
266         CALL ZGBTRF( 1, 1, -1, 0, A, 1, IP, INFO )
267         CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
268         INFOT = 4
269         CALL ZGBTRF( 1, 1, 0, -1, A, 1, IP, INFO )
270         CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
271         INFOT = 6
272         CALL ZGBTRF( 2, 2, 1, 1, A, 3, IP, INFO )
273         CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
274*
275*        ZGBTF2
276*
277         SRNAMT = 'ZGBTF2'
278         INFOT = 1
279         CALL ZGBTF2( -1, 0, 0, 0, A, 1, IP, INFO )
280         CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
281         INFOT = 2
282         CALL ZGBTF2( 0, -1, 0, 0, A, 1, IP, INFO )
283         CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
284         INFOT = 3
285         CALL ZGBTF2( 1, 1, -1, 0, A, 1, IP, INFO )
286         CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
287         INFOT = 4
288         CALL ZGBTF2( 1, 1, 0, -1, A, 1, IP, INFO )
289         CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
290         INFOT = 6
291         CALL ZGBTF2( 2, 2, 1, 1, A, 3, IP, INFO )
292         CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
293*
294*        ZGBTRS
295*
296         SRNAMT = 'ZGBTRS'
297         INFOT = 1
298         CALL ZGBTRS( '/', 0, 0, 0, 1, A, 1, IP, B, 1, INFO )
299         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
300         INFOT = 2
301         CALL ZGBTRS( 'N', -1, 0, 0, 1, A, 1, IP, B, 1, INFO )
302         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
303         INFOT = 3
304         CALL ZGBTRS( 'N', 1, -1, 0, 1, A, 1, IP, B, 1, INFO )
305         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
306         INFOT = 4
307         CALL ZGBTRS( 'N', 1, 0, -1, 1, A, 1, IP, B, 1, INFO )
308         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
309         INFOT = 5
310         CALL ZGBTRS( 'N', 1, 0, 0, -1, A, 1, IP, B, 1, INFO )
311         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
312         INFOT = 7
313         CALL ZGBTRS( 'N', 2, 1, 1, 1, A, 3, IP, B, 2, INFO )
314         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
315         INFOT = 10
316         CALL ZGBTRS( 'N', 2, 0, 0, 1, A, 1, IP, B, 1, INFO )
317         CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
318*
319*        ZGBRFS
320*
321         SRNAMT = 'ZGBRFS'
322         INFOT = 1
323         CALL ZGBRFS( '/', 0, 0, 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
324     $                R2, W, R, INFO )
325         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
326         INFOT = 2
327         CALL ZGBRFS( 'N', -1, 0, 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
328     $                R2, W, R, INFO )
329         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
330         INFOT = 3
331         CALL ZGBRFS( 'N', 1, -1, 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
332     $                R2, W, R, INFO )
333         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
334         INFOT = 4
335         CALL ZGBRFS( 'N', 1, 0, -1, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
336     $                R2, W, R, INFO )
337         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
338         INFOT = 5
339         CALL ZGBRFS( 'N', 1, 0, 0, -1, A, 1, AF, 1, IP, B, 1, X, 1, R1,
340     $                R2, W, R, INFO )
341         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
342         INFOT = 7
343         CALL ZGBRFS( 'N', 2, 1, 1, 1, A, 2, AF, 4, IP, B, 2, X, 2, R1,
344     $                R2, W, R, INFO )
345         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
346         INFOT = 9
347         CALL ZGBRFS( 'N', 2, 1, 1, 1, A, 3, AF, 3, IP, B, 2, X, 2, R1,
348     $                R2, W, R, INFO )
349         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
350         INFOT = 12
351         CALL ZGBRFS( 'N', 2, 0, 0, 1, A, 1, AF, 1, IP, B, 1, X, 2, R1,
352     $                R2, W, R, INFO )
353         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
354         INFOT = 14
355         CALL ZGBRFS( 'N', 2, 0, 0, 1, A, 1, AF, 1, IP, B, 2, X, 1, R1,
356     $                R2, W, R, INFO )
357         CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
358*
359*        ZGBCON
360*
361         SRNAMT = 'ZGBCON'
362         INFOT = 1
363         CALL ZGBCON( '/', 0, 0, 0, A, 1, IP, ANRM, RCOND, W, R, INFO )
364         CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
365         INFOT = 2
366         CALL ZGBCON( '1', -1, 0, 0, A, 1, IP, ANRM, RCOND, W, R, INFO )
367         CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
368         INFOT = 3
369         CALL ZGBCON( '1', 1, -1, 0, A, 1, IP, ANRM, RCOND, W, R, INFO )
370         CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
371         INFOT = 4
372         CALL ZGBCON( '1', 1, 0, -1, A, 1, IP, ANRM, RCOND, W, R, INFO )
373         CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
374         INFOT = 6
375         CALL ZGBCON( '1', 2, 1, 1, A, 3, IP, ANRM, RCOND, W, R, INFO )
376         CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
377*
378*        ZGBEQU
379*
380         SRNAMT = 'ZGBEQU'
381         INFOT = 1
382         CALL ZGBEQU( -1, 0, 0, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
383     $                INFO )
384         CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
385         INFOT = 2
386         CALL ZGBEQU( 0, -1, 0, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
387     $                INFO )
388         CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
389         INFOT = 3
390         CALL ZGBEQU( 1, 1, -1, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
391     $                INFO )
392         CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
393         INFOT = 4
394         CALL ZGBEQU( 1, 1, 0, -1, A, 1, R1, R2, RCOND, CCOND, ANRM,
395     $                INFO )
396         CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
397         INFOT = 6
398         CALL ZGBEQU( 2, 2, 1, 1, A, 2, R1, R2, RCOND, CCOND, ANRM,
399     $                INFO )
400         CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
401      END IF
402*
403*     Print a summary line.
404*
405      CALL ALAESM( PATH, OK, NOUT )
406*
407      RETURN
408*
409*     End of ZERRGE
410*
411      END
412