1       SUBROUTINE ZERRHS( 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 *  ZERRHS tests the error exits for ZGEBAK, CGEBAL, CGEHRD, ZUNGHR,
 16 *  ZUNMHR, ZHSEQR, CHSEIN, and ZTREVC.
 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, LW
 31       PARAMETER          ( NMAX = 3, LW = NMAX*NMAX )
 32 *     ..
 33 *     .. Local Scalars ..
 34       CHARACTER*2        C2
 35       INTEGER            I, IHI, ILO, INFO, J, M, NT
 36 *     ..
 37 *     .. Local Arrays ..
 38       LOGICAL            SEL( NMAX )
 39       INTEGER            IFAILL( NMAX ), IFAILR( NMAX )
 40       DOUBLE PRECISION   RW( NMAX ), S( NMAX )
 41       COMPLEX*16         A( NMAX, NMAX ), C( NMAX, NMAX ), TAU( NMAX ),
 42      $                   VL( NMAX, NMAX ), VR( NMAX, NMAX ), W( LW ),
 43      $                   X( NMAX )
 44 *     ..
 45 *     .. External Functions ..
 46       LOGICAL            LSAMEN
 47       EXTERNAL           LSAMEN
 48 *     ..
 49 *     .. External Subroutines ..
 50       EXTERNAL           CHKXER, ZGEBAK, ZGEBAL, ZGEHRD, ZHSEIN, ZHSEQR,
 51      $                   ZTREVC, ZUNGHR, ZUNMHR
 52 *     ..
 53 *     .. Intrinsic Functions ..
 54       INTRINSIC          DBLE
 55 *     ..
 56 *     .. Scalars in Common ..
 57       LOGICAL            LERR, OK
 58       CHARACTER*32       SRNAMT
 59       INTEGER            INFOT, NOUT
 60 *     ..
 61 *     .. Common blocks ..
 62       COMMON             / INFOC / INFOT, NOUT, OK, LERR
 63       COMMON             / SRNAMC / SRNAMT
 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 ) = 1.D0 / DBLE( I+J )
 76    10    CONTINUE
 77          SEL( J ) = .TRUE.
 78    20 CONTINUE
 79       OK = .TRUE.
 80       NT = 0
 81 *
 82 *     Test error exits of the nonsymmetric eigenvalue routines.
 83 *
 84       IF( LSAMEN( 2, C2, 'HS' ) ) THEN
 85 *
 86 *        ZGEBAL
 87 *
 88          SRNAMT = 'ZGEBAL'
 89          INFOT = 1
 90          CALL ZGEBAL( '/'0, A, 1, ILO, IHI, S, INFO )
 91          CALL CHKXER( 'ZGEBAL', INFOT, NOUT, LERR, OK )
 92          INFOT = 2
 93          CALL ZGEBAL( 'N'-1, A, 1, ILO, IHI, S, INFO )
 94          CALL CHKXER( 'ZGEBAL', INFOT, NOUT, LERR, OK )
 95          INFOT = 4
 96          CALL ZGEBAL( 'N'2, A, 1, ILO, IHI, S, INFO )
 97          CALL CHKXER( 'ZGEBAL', INFOT, NOUT, LERR, OK )
 98          NT = NT + 3
 99 *
100 *        ZGEBAK
101 *
102          SRNAMT = 'ZGEBAK'
103          INFOT = 1
104          CALL ZGEBAK( '/''R'010, S, 0, A, 1, INFO )
105          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
106          INFOT = 2
107          CALL ZGEBAK( 'N''/'010, S, 0, A, 1, INFO )
108          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
109          INFOT = 3
110          CALL ZGEBAK( 'N''R'-110, S, 0, A, 1, INFO )
111          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
112          INFOT = 4
113          CALL ZGEBAK( 'N''R'000, S, 0, A, 1, INFO )
114          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
115          INFOT = 4
116          CALL ZGEBAK( 'N''R'020, S, 0, A, 1, INFO )
117          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
118          INFOT = 5
119          CALL ZGEBAK( 'N''R'221, S, 0, A, 2, INFO )
120          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
121          INFOT = 5
122          CALL ZGEBAK( 'N''R'011, S, 0, A, 1, INFO )
123          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
124          INFOT = 7
125          CALL ZGEBAK( 'N''R'010, S, -1, A, 1, INFO )
126          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
127          INFOT = 9
128          CALL ZGEBAK( 'N''R'212, S, 0, A, 1, INFO )
129          CALL CHKXER( 'ZGEBAK', INFOT, NOUT, LERR, OK )
130          NT = NT + 9
131 *
132 *        ZGEHRD
133 *
134          SRNAMT = 'ZGEHRD'
135          INFOT = 1
136          CALL ZGEHRD( -111, A, 1, TAU, W, 1, INFO )
137          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
138          INFOT = 2
139          CALL ZGEHRD( 000, A, 1, TAU, W, 1, INFO )
140          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
141          INFOT = 2
142          CALL ZGEHRD( 020, A, 1, TAU, W, 1, INFO )
143          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
144          INFOT = 3
145          CALL ZGEHRD( 110, A, 1, TAU, W, 1, INFO )
146          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
147          INFOT = 3
148          CALL ZGEHRD( 011, A, 1, TAU, W, 1, INFO )
149          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
150          INFOT = 5
151          CALL ZGEHRD( 211, A, 1, TAU, W, 2, INFO )
152          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
153          INFOT = 8
154          CALL ZGEHRD( 212, A, 2, TAU, W, 1, INFO )
155          CALL CHKXER( 'ZGEHRD', INFOT, NOUT, LERR, OK )
156          NT = NT + 7
157 *
158 *        ZUNGHR
159 *
160          SRNAMT = 'ZUNGHR'
161          INFOT = 1
162          CALL ZUNGHR( -111, A, 1, TAU, W, 1, INFO )
163          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
164          INFOT = 2
165          CALL ZUNGHR( 000, A, 1, TAU, W, 1, INFO )
166          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
167          INFOT = 2
168          CALL ZUNGHR( 020, A, 1, TAU, W, 1, INFO )
169          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
170          INFOT = 3
171          CALL ZUNGHR( 110, A, 1, TAU, W, 1, INFO )
172          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
173          INFOT = 3
174          CALL ZUNGHR( 011, A, 1, TAU, W, 1, INFO )
175          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
176          INFOT = 5
177          CALL ZUNGHR( 211, A, 1, TAU, W, 1, INFO )
178          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
179          INFOT = 8
180          CALL ZUNGHR( 313, A, 3, TAU, W, 1, INFO )
181          CALL CHKXER( 'ZUNGHR', INFOT, NOUT, LERR, OK )
182          NT = NT + 7
183 *
184 *        ZUNMHR
185 *
186          SRNAMT = 'ZUNMHR'
187          INFOT = 1
188          CALL ZUNMHR( '/''N'0010, A, 1, TAU, C, 1, W, 1,
189      $                INFO )
190          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
191          INFOT = 2
192          CALL ZUNMHR( 'L''/'0010, A, 1, TAU, C, 1, W, 1,
193      $                INFO )
194          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
195          INFOT = 3
196          CALL ZUNMHR( 'L''N'-1010, A, 1, TAU, C, 1, W, 1,
197      $                INFO )
198          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
199          INFOT = 4
200          CALL ZUNMHR( 'L''N'0-110, A, 1, TAU, C, 1, W, 1,
201      $                INFO )
202          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
203          INFOT = 5
204          CALL ZUNMHR( 'L''N'0000, A, 1, TAU, C, 1, W, 1,
205      $                INFO )
206          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
207          INFOT = 5
208          CALL ZUNMHR( 'L''N'0020, A, 1, TAU, C, 1, W, 1,
209      $                INFO )
210          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
211          INFOT = 5
212          CALL ZUNMHR( 'L''N'1221, A, 1, TAU, C, 1, W, 2,
213      $                INFO )
214          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
215          INFOT = 5
216          CALL ZUNMHR( 'R''N'2121, A, 1, TAU, C, 2, W, 2,
217      $                INFO )
218          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
219          INFOT = 6
220          CALL ZUNMHR( 'L''N'1110, A, 1, TAU, C, 1, W, 1,
221      $                INFO )
222          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
223          INFOT = 6
224          CALL ZUNMHR( 'L''N'0111, A, 1, TAU, C, 1, W, 1,
225      $                INFO )
226          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
227          INFOT = 6
228          CALL ZUNMHR( 'R''N'1011, A, 1, TAU, C, 1, W, 1,
229      $                INFO )
230          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
231          INFOT = 8
232          CALL ZUNMHR( 'L''N'2111, A, 1, TAU, C, 2, W, 1,
233      $                INFO )
234          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
235          INFOT = 8
236          CALL ZUNMHR( 'R''N'1211, A, 1, TAU, C, 1, W, 1,
237      $                INFO )
238          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
239          INFOT = 11
240          CALL ZUNMHR( 'L''N'2111, A, 2, TAU, C, 1, W, 1,
241      $                INFO )
242          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
243          INFOT = 13
244          CALL ZUNMHR( 'L''N'1211, A, 1, TAU, C, 1, W, 1,
245      $                INFO )
246          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
247          INFOT = 13
248          CALL ZUNMHR( 'R''N'2111, A, 1, TAU, C, 2, W, 1,
249      $                INFO )
250          CALL CHKXER( 'ZUNMHR', INFOT, NOUT, LERR, OK )
251          NT = NT + 16
252 *
253 *        ZHSEQR
254 *
255          SRNAMT = 'ZHSEQR'
256          INFOT = 1
257          CALL ZHSEQR( '/''N'010, A, 1, X, C, 1, W, 1, INFO )
258          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
259          INFOT = 2
260          CALL ZHSEQR( 'E''/'010, A, 1, X, C, 1, W, 1, INFO )
261          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
262          INFOT = 3
263          CALL ZHSEQR( 'E''N'-110, A, 1, X, C, 1, W, 1, INFO )
264          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
265          INFOT = 4
266          CALL ZHSEQR( 'E''N'000, A, 1, X, C, 1, W, 1, INFO )
267          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
268          INFOT = 4
269          CALL ZHSEQR( 'E''N'020, A, 1, X, C, 1, W, 1, INFO )
270          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
271          INFOT = 5
272          CALL ZHSEQR( 'E''N'110, A, 1, X, C, 1, W, 1, INFO )
273          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
274          INFOT = 5
275          CALL ZHSEQR( 'E''N'112, A, 1, X, C, 1, W, 1, INFO )
276          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
277          INFOT = 7
278          CALL ZHSEQR( 'E''N'212, A, 1, X, C, 2, W, 1, INFO )
279          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
280          INFOT = 10
281          CALL ZHSEQR( 'E''V'212, A, 2, X, C, 1, W, 1, INFO )
282          CALL CHKXER( 'ZHSEQR', INFOT, NOUT, LERR, OK )
283          NT = NT + 9
284 *
285 *        ZHSEIN
286 *
287          SRNAMT = 'ZHSEIN'
288          INFOT = 1
289          CALL ZHSEIN( '/''N''N', SEL, 0, A, 1, X, VL, 1, VR, 10,
290      $                M, W, RW, IFAILL, IFAILR, INFO )
291          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
292          INFOT = 2
293          CALL ZHSEIN( 'R''/''N', SEL, 0, A, 1, X, VL, 1, VR, 10,
294      $                M, W, RW, IFAILL, IFAILR, INFO )
295          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
296          INFOT = 3
297          CALL ZHSEIN( 'R''N''/', SEL, 0, A, 1, X, VL, 1, VR, 10,
298      $                M, W, RW, IFAILL, IFAILR, INFO )
299          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
300          INFOT = 5
301          CALL ZHSEIN( 'R''N''N', SEL, -1, A, 1, X, VL, 1, VR, 10,
302      $                M, W, RW, IFAILL, IFAILR, INFO )
303          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
304          INFOT = 7
305          CALL ZHSEIN( 'R''N''N', SEL, 2, A, 1, X, VL, 1, VR, 24,
306      $                M, W, RW, IFAILL, IFAILR, INFO )
307          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
308          INFOT = 10
309          CALL ZHSEIN( 'L''N''N', SEL, 2, A, 2, X, VL, 1, VR, 14,
310      $                M, W, RW, IFAILL, IFAILR, INFO )
311          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
312          INFOT = 12
313          CALL ZHSEIN( 'R''N''N', SEL, 2, A, 2, X, VL, 1, VR, 14,
314      $                M, W, RW, IFAILL, IFAILR, INFO )
315          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
316          INFOT = 13
317          CALL ZHSEIN( 'R''N''N', SEL, 2, A, 2, X, VL, 1, VR, 21,
318      $                M, W, RW, IFAILL, IFAILR, INFO )
319          CALL CHKXER( 'ZHSEIN', INFOT, NOUT, LERR, OK )
320          NT = NT + 8
321 *
322 *        ZTREVC
323 *
324          SRNAMT = 'ZTREVC'
325          INFOT = 1
326          CALL ZTREVC( '/''A', SEL, 0, A, 1, VL, 1, VR, 10, M, W, RW,
327      $                INFO )
328          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
329          INFOT = 2
330          CALL ZTREVC( 'L''/', SEL, 0, A, 1, VL, 1, VR, 10, M, W, RW,
331      $                INFO )
332          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
333          INFOT = 4
334          CALL ZTREVC( 'L''A', SEL, -1, A, 1, VL, 1, VR, 10, M, W,
335      $                RW, INFO )
336          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
337          INFOT = 6
338          CALL ZTREVC( 'L''A', SEL, 2, A, 1, VL, 2, VR, 14, M, W, RW,
339      $                INFO )
340          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
341          INFOT = 8
342          CALL ZTREVC( 'L''A', SEL, 2, A, 2, VL, 1, VR, 14, M, W, RW,
343      $                INFO )
344          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
345          INFOT = 10
346          CALL ZTREVC( 'R''A', SEL, 2, A, 2, VL, 1, VR, 14, M, W, RW,
347      $                INFO )
348          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
349          INFOT = 11
350          CALL ZTREVC( 'L''A', SEL, 2, A, 2, VL, 2, VR, 11, M, W, RW,
351      $                INFO )
352          CALL CHKXER( 'ZTREVC', INFOT, NOUT, LERR, OK )
353          NT = NT + 7
354       END IF
355 *
356 *     Print a summary line.
357 *
358       IF( OK ) THEN
359          WRITE( NOUT, FMT = 9999 )PATH, NT
360       ELSE
361          WRITE( NOUT, FMT = 9998 )PATH
362       END IF
363 *
364  9999 FORMAT1X, A3, ' routines passed the tests of the error exits',
365      $      ' (', I3, ' tests done)' )
366  9998 FORMAT' *** ', A3, ' routines failed the tests of the error ',
367      $      'exits ***' )
368 *
369       RETURN
370 *
371 *     End of ZERRHS
372 *
373       END