1       SUBROUTINE ZERRGE( PATH, NUNIT )
  2 *
  3 *  -- LAPACK test routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       CHARACTER*3        PATH
  9       INTEGER            NUNIT
 10 *     ..
 11 *
 12 *  Purpose
 13 *  =======
 14 *
 15 *  ZERRGE tests the error exits for the COMPLEX*16 routines
 16 *  for general matrices.
 17 *
 18 *  Arguments
 19 *  =========
 20 *
 21 *  PATH    (input) CHARACTER*3
 22 *          The LAPACK path name for the routines to be tested.
 23 *
 24 *  NUNIT   (input) INTEGER
 25 *          The unit number for output.
 26 *
 27 *  =====================================================================
 28 *
 29 *     .. Parameters ..
 30       INTEGER            NMAX
 31       PARAMETER          ( NMAX = 4 )
 32 *     ..
 33 *     .. Local Scalars ..
 34       CHARACTER*2        C2
 35       INTEGER            I, INFO, J
 36       DOUBLE PRECISION   ANRM, CCOND, RCOND
 37 *     ..
 38 *     .. Local Arrays ..
 39       INTEGER            IP( NMAX )
 40       DOUBLE PRECISION   R( NMAX ), R1( NMAX ), R2( NMAX )
 41       COMPLEX*16         A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
 42      $                   W( 2*NMAX ), X( NMAX )
 43 *     ..
 44 *     .. External Functions ..
 45       LOGICAL            LSAMEN
 46       EXTERNAL           LSAMEN
 47 *     ..
 48 *     .. External Subroutines ..
 49       EXTERNAL           ALAESM, CHKXER, ZGBCON, ZGBEQU, ZGBRFS, ZGBTF2,
 50      $                   ZGBTRF, ZGBTRS, ZGECON, ZGEEQU, ZGERFS, ZGETF2,
 51      $                   ZGETRF, ZGETRI, ZGETRS
 52 *     ..
 53 *     .. Scalars in Common ..
 54       LOGICAL            LERR, OK
 55       CHARACTER*32       SRNAMT
 56       INTEGER            INFOT, NOUT
 57 *     ..
 58 *     .. Common blocks ..
 59       COMMON             / INFOC / INFOT, NOUT, OK, LERR
 60       COMMON             / SRNAMC / SRNAMT
 61 *     ..
 62 *     .. Intrinsic Functions ..
 63       INTRINSIC          DBLEDCMPLX
 64 *     ..
 65 *     .. Executable Statements ..
 66 *
 67       NOUT = NUNIT
 68       WRITE( NOUT, FMT = * )
 69       C2 = PATH( 23 )
 70 *
 71 *     Set the variables to innocuous values.
 72 *
 73       DO 20 J = 1, NMAX
 74          DO 10 I = 1, NMAX
 75             A( I, J ) = DCMPLX1.D0 / DBLE( I+J ),
 76      $                  -1.D0 / DBLE( I+J ) )
 77             AF( I, J ) = DCMPLX1.D0 / DBLE( I+J ),
 78      $                   -1.D0 / DBLE( I+J ) )
 79    10    CONTINUE
 80          B( J ) = 0.D0
 81          R1( J ) = 0.D0
 82          R2( J ) = 0.D0
 83          W( J ) = 0.D0
 84          X( J ) = 0.D0
 85          IP( J ) = J
 86    20 CONTINUE
 87       OK = .TRUE.
 88 *
 89 *     Test error exits of the routines that use the LU decomposition
 90 *     of a general matrix.
 91 *
 92       IF( LSAMEN( 2, C2, 'GE' ) ) THEN
 93 *
 94 *        ZGETRF
 95 *
 96          SRNAMT = 'ZGETRF'
 97          INFOT = 1
 98          CALL ZGETRF( -10, A, 1, IP, INFO )
 99          CALL CHKXER( 'ZGETRF', INFOT, NOUT, LERR, OK )
100          INFOT = 2
101          CALL ZGETRF( 0-1, A, 1, IP, INFO )
102          CALL CHKXER( 'ZGETRF', INFOT, NOUT, LERR, OK )
103          INFOT = 4
104          CALL ZGETRF( 21, A, 1, IP, INFO )
105          CALL CHKXER( 'ZGETRF', INFOT, NOUT, LERR, OK )
106 *
107 *        ZGETF2
108 *
109          SRNAMT = 'ZGETF2'
110          INFOT = 1
111          CALL ZGETF2( -10, A, 1, IP, INFO )
112          CALL CHKXER( 'ZGETF2', INFOT, NOUT, LERR, OK )
113          INFOT = 2
114          CALL ZGETF2( 0-1, A, 1, IP, INFO )
115          CALL CHKXER( 'ZGETF2', INFOT, NOUT, LERR, OK )
116          INFOT = 4
117          CALL ZGETF2( 21, A, 1, IP, INFO )
118          CALL CHKXER( 'ZGETF2', INFOT, NOUT, LERR, OK )
119 *
120 *        ZGETRI
121 *
122          SRNAMT = 'ZGETRI'
123          INFOT = 1
124          CALL ZGETRI( -1, A, 1, IP, W, 1, INFO )
125          CALL CHKXER( 'ZGETRI', INFOT, NOUT, LERR, OK )
126          INFOT = 3
127          CALL ZGETRI( 2, A, 1, IP, W, 2, INFO )
128          CALL CHKXER( 'ZGETRI', INFOT, NOUT, LERR, OK )
129          INFOT = 6
130          CALL ZGETRI( 2, A, 2, IP, W, 1, INFO )
131          CALL CHKXER( 'ZGETRI', INFOT, NOUT, LERR, OK )
132 *
133 *        ZGETRS
134 *
135          SRNAMT = 'ZGETRS'
136          INFOT = 1
137          CALL ZGETRS( '/'00, A, 1, IP, B, 1, INFO )
138          CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
139          INFOT = 2
140          CALL ZGETRS( 'N'-10, A, 1, IP, B, 1, INFO )
141          CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
142          INFOT = 3
143          CALL ZGETRS( 'N'0-1, A, 1, IP, B, 1, INFO )
144          CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
145          INFOT = 5
146          CALL ZGETRS( 'N'21, A, 1, IP, B, 2, INFO )
147          CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
148          INFOT = 8
149          CALL ZGETRS( 'N'21, A, 2, IP, B, 1, INFO )
150          CALL CHKXER( 'ZGETRS', INFOT, NOUT, LERR, OK )
151 *
152 *        ZGERFS
153 *
154          SRNAMT = 'ZGERFS'
155          INFOT = 1
156          CALL ZGERFS( '/'00, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2, W,
157      $                R, INFO )
158          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
159          INFOT = 2
160          CALL ZGERFS( 'N'-10, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
161      $                W, R, INFO )
162          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
163          INFOT = 3
164          CALL ZGERFS( 'N'0-1, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
165      $                W, R, INFO )
166          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
167          INFOT = 5
168          CALL ZGERFS( 'N'21, A, 1, AF, 2, IP, B, 2, X, 2, R1, R2, W,
169      $                R, INFO )
170          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
171          INFOT = 7
172          CALL ZGERFS( 'N'21, A, 2, AF, 1, IP, B, 2, X, 2, R1, R2, W,
173      $                R, INFO )
174          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
175          INFOT = 10
176          CALL ZGERFS( 'N'21, A, 2, AF, 2, IP, B, 1, X, 2, R1, R2, W,
177      $                R, INFO )
178          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
179          INFOT = 12
180          CALL ZGERFS( 'N'21, A, 2, AF, 2, IP, B, 2, X, 1, R1, R2, W,
181      $                R, INFO )
182          CALL CHKXER( 'ZGERFS', INFOT, NOUT, LERR, OK )
183 *
184 *        ZGECON
185 *
186          SRNAMT = 'ZGECON'
187          INFOT = 1
188          CALL ZGECON( '/'0, A, 1, ANRM, RCOND, W, R, INFO )
189          CALL CHKXER( 'ZGECON', INFOT, NOUT, LERR, OK )
190          INFOT = 2
191          CALL ZGECON( '1'-1, A, 1, ANRM, RCOND, W, R, INFO )
192          CALL CHKXER( 'ZGECON', INFOT, NOUT, LERR, OK )
193          INFOT = 4
194          CALL ZGECON( '1'2, A, 1, ANRM, RCOND, W, R, INFO )
195          CALL CHKXER( 'ZGECON', INFOT, NOUT, LERR, OK )
196 *
197 *        ZGEEQU
198 *
199          SRNAMT = 'ZGEEQU'
200          INFOT = 1
201          CALL ZGEEQU( -10, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
202          CALL CHKXER( 'ZGEEQU', INFOT, NOUT, LERR, OK )
203          INFOT = 2
204          CALL ZGEEQU( 0-1, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
205          CALL CHKXER( 'ZGEEQU', INFOT, NOUT, LERR, OK )
206          INFOT = 4
207          CALL ZGEEQU( 22, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
208          CALL CHKXER( 'ZGEEQU', INFOT, NOUT, LERR, OK )
209 *
210 *     Test error exits of the routines that use the LU decomposition
211 *     of a general band matrix.
212 *
213       ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
214 *
215 *        ZGBTRF
216 *
217          SRNAMT = 'ZGBTRF'
218          INFOT = 1
219          CALL ZGBTRF( -1000, A, 1, IP, INFO )
220          CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
221          INFOT = 2
222          CALL ZGBTRF( 0-100, A, 1, IP, INFO )
223          CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
224          INFOT = 3
225          CALL ZGBTRF( 11-10, A, 1, IP, INFO )
226          CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
227          INFOT = 4
228          CALL ZGBTRF( 110-1, A, 1, IP, INFO )
229          CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
230          INFOT = 6
231          CALL ZGBTRF( 2211, A, 3, IP, INFO )
232          CALL CHKXER( 'ZGBTRF', INFOT, NOUT, LERR, OK )
233 *
234 *        ZGBTF2
235 *
236          SRNAMT = 'ZGBTF2'
237          INFOT = 1
238          CALL ZGBTF2( -1000, A, 1, IP, INFO )
239          CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
240          INFOT = 2
241          CALL ZGBTF2( 0-100, A, 1, IP, INFO )
242          CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
243          INFOT = 3
244          CALL ZGBTF2( 11-10, A, 1, IP, INFO )
245          CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
246          INFOT = 4
247          CALL ZGBTF2( 110-1, A, 1, IP, INFO )
248          CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
249          INFOT = 6
250          CALL ZGBTF2( 2211, A, 3, IP, INFO )
251          CALL CHKXER( 'ZGBTF2', INFOT, NOUT, LERR, OK )
252 *
253 *        ZGBTRS
254 *
255          SRNAMT = 'ZGBTRS'
256          INFOT = 1
257          CALL ZGBTRS( '/'0001, A, 1, IP, B, 1, INFO )
258          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
259          INFOT = 2
260          CALL ZGBTRS( 'N'-1001, A, 1, IP, B, 1, INFO )
261          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
262          INFOT = 3
263          CALL ZGBTRS( 'N'1-101, A, 1, IP, B, 1, INFO )
264          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
265          INFOT = 4
266          CALL ZGBTRS( 'N'10-11, A, 1, IP, B, 1, INFO )
267          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
268          INFOT = 5
269          CALL ZGBTRS( 'N'100-1, A, 1, IP, B, 1, INFO )
270          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
271          INFOT = 7
272          CALL ZGBTRS( 'N'2111, A, 3, IP, B, 2, INFO )
273          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
274          INFOT = 10
275          CALL ZGBTRS( 'N'2001, A, 1, IP, B, 1, INFO )
276          CALL CHKXER( 'ZGBTRS', INFOT, NOUT, LERR, OK )
277 *
278 *        ZGBRFS
279 *
280          SRNAMT = 'ZGBRFS'
281          INFOT = 1
282          CALL ZGBRFS( '/'0000, A, 1, AF, 1, IP, B, 1, X, 1, R1,
283      $                R2, W, R, INFO )
284          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
285          INFOT = 2
286          CALL ZGBRFS( 'N'-1000, A, 1, AF, 1, IP, B, 1, X, 1, R1,
287      $                R2, W, R, INFO )
288          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
289          INFOT = 3
290          CALL ZGBRFS( 'N'1-100, A, 1, AF, 1, IP, B, 1, X, 1, R1,
291      $                R2, W, R, INFO )
292          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
293          INFOT = 4
294          CALL ZGBRFS( 'N'10-10, A, 1, AF, 1, IP, B, 1, X, 1, R1,
295      $                R2, W, R, INFO )
296          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
297          INFOT = 5
298          CALL ZGBRFS( 'N'100-1, A, 1, AF, 1, IP, B, 1, X, 1, R1,
299      $                R2, W, R, INFO )
300          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
301          INFOT = 7
302          CALL ZGBRFS( 'N'2111, A, 2, AF, 4, IP, B, 2, X, 2, R1,
303      $                R2, W, R, INFO )
304          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
305          INFOT = 9
306          CALL ZGBRFS( 'N'2111, A, 3, AF, 3, IP, B, 2, X, 2, R1,
307      $                R2, W, R, INFO )
308          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
309          INFOT = 12
310          CALL ZGBRFS( 'N'2001, A, 1, AF, 1, IP, B, 1, X, 2, R1,
311      $                R2, W, R, INFO )
312          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
313          INFOT = 14
314          CALL ZGBRFS( 'N'2001, A, 1, AF, 1, IP, B, 2, X, 1, R1,
315      $                R2, W, R, INFO )
316          CALL CHKXER( 'ZGBRFS', INFOT, NOUT, LERR, OK )
317 *
318 *        ZGBCON
319 *
320          SRNAMT = 'ZGBCON'
321          INFOT = 1
322          CALL ZGBCON( '/'000, A, 1, IP, ANRM, RCOND, W, R, INFO )
323          CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
324          INFOT = 2
325          CALL ZGBCON( '1'-100, A, 1, IP, ANRM, RCOND, W, R, INFO )
326          CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
327          INFOT = 3
328          CALL ZGBCON( '1'1-10, A, 1, IP, ANRM, RCOND, W, R, INFO )
329          CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
330          INFOT = 4
331          CALL ZGBCON( '1'10-1, A, 1, IP, ANRM, RCOND, W, R, INFO )
332          CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
333          INFOT = 6
334          CALL ZGBCON( '1'211, A, 3, IP, ANRM, RCOND, W, R, INFO )
335          CALL CHKXER( 'ZGBCON', INFOT, NOUT, LERR, OK )
336 *
337 *        ZGBEQU
338 *
339          SRNAMT = 'ZGBEQU'
340          INFOT = 1
341          CALL ZGBEQU( -1000, A, 1, R1, R2, RCOND, CCOND, ANRM,
342      $                INFO )
343          CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
344          INFOT = 2
345          CALL ZGBEQU( 0-100, A, 1, R1, R2, RCOND, CCOND, ANRM,
346      $                INFO )
347          CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
348          INFOT = 3
349          CALL ZGBEQU( 11-10, A, 1, R1, R2, RCOND, CCOND, ANRM,
350      $                INFO )
351          CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
352          INFOT = 4
353          CALL ZGBEQU( 110-1, A, 1, R1, R2, RCOND, CCOND, ANRM,
354      $                INFO )
355          CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
356          INFOT = 6
357          CALL ZGBEQU( 2211, A, 2, R1, R2, RCOND, CCOND, ANRM,
358      $                INFO )
359          CALL CHKXER( 'ZGBEQU', INFOT, NOUT, LERR, OK )
360       END IF
361 *
362 *     Print a summary line.
363 *
364       CALL ALAESM( PATH, OK, NOUT )
365 *
366       RETURN
367 *
368 *     End of ZERRGE
369 *
370       END