1       SUBROUTINE SERRTR( 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 *  SERRTR tests the error exits for the REAL triangular
 16 *  routines.
 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 = 2 )
 32 *     ..
 33 *     .. Local Scalars ..
 34       CHARACTER*2        C2
 35       INTEGER            INFO
 36       REAL               RCOND, SCALE
 37 *     ..
 38 *     .. Local Arrays ..
 39       INTEGER            IW( NMAX )
 40       REAL               A( NMAX, NMAX ), B( NMAX ), R1( NMAX ),
 41      $                   R2( NMAX ), W( NMAX ), X( NMAX )
 42 *     ..
 43 *     .. External Functions ..
 44       LOGICAL            LSAMEN
 45       EXTERNAL           LSAMEN
 46 *     ..
 47 *     .. External Subroutines ..
 48       EXTERNAL           ALAESM, CHKXER, SLATBS, SLATPS, SLATRS, STBCON,
 49      $                   STBRFS, STBTRS, STPCON, STPRFS, STPTRI, STPTRS,
 50      $                   STRCON, STRRFS, STRTI2, STRTRI, STRTRS
 51 *     ..
 52 *     .. Scalars in Common ..
 53       LOGICAL            LERR, OK
 54       CHARACTER*32       SRNAMT
 55       INTEGER            INFOT, NOUT
 56 *     ..
 57 *     .. Common blocks ..
 58       COMMON             / INFOC / INFOT, NOUT, OK, LERR
 59       COMMON             / SRNAMC / SRNAMT
 60 *     ..
 61 *     .. Executable Statements ..
 62 *
 63       NOUT = NUNIT
 64       WRITE( NOUT, FMT = * )
 65       C2 = PATH( 23 )
 66       A( 11 ) = 1.
 67       A( 12 ) = 2.
 68       A( 22 ) = 3.
 69       A( 21 ) = 4.
 70       OK = .TRUE.
 71 *
 72       IF( LSAMEN( 2, C2, 'TR' ) ) THEN
 73 *
 74 *        Test error exits for the general triangular routines.
 75 *
 76 *        STRTRI
 77 *
 78          SRNAMT = 'STRTRI'
 79          INFOT = 1
 80          CALL STRTRI( '/''N'0, A, 1, INFO )
 81          CALL CHKXER( 'STRTRI', INFOT, NOUT, LERR, OK )
 82          INFOT = 2
 83          CALL STRTRI( 'U''/'0, A, 1, INFO )
 84          CALL CHKXER( 'STRTRI', INFOT, NOUT, LERR, OK )
 85          INFOT = 3
 86          CALL STRTRI( 'U''N'-1, A, 1, INFO )
 87          CALL CHKXER( 'STRTRI', INFOT, NOUT, LERR, OK )
 88          INFOT = 5
 89          CALL STRTRI( 'U''N'2, A, 1, INFO )
 90          CALL CHKXER( 'STRTRI', INFOT, NOUT, LERR, OK )
 91 *
 92 *        STRTI2
 93 *
 94          SRNAMT = 'STRTI2'
 95          INFOT = 1
 96          CALL STRTI2( '/''N'0, A, 1, INFO )
 97          CALL CHKXER( 'STRTI2', INFOT, NOUT, LERR, OK )
 98          INFOT = 2
 99          CALL STRTI2( 'U''/'0, A, 1, INFO )
100          CALL CHKXER( 'STRTI2', INFOT, NOUT, LERR, OK )
101          INFOT = 3
102          CALL STRTI2( 'U''N'-1, A, 1, INFO )
103          CALL CHKXER( 'STRTI2', INFOT, NOUT, LERR, OK )
104          INFOT = 5
105          CALL STRTI2( 'U''N'2, A, 1, INFO )
106          CALL CHKXER( 'STRTI2', INFOT, NOUT, LERR, OK )
107 *
108 *        STRTRS
109 *
110          SRNAMT = 'STRTRS'
111          INFOT = 1
112          CALL STRTRS( '/''N''N'00, A, 1, X, 1, INFO )
113          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
114          INFOT = 2
115          CALL STRTRS( 'U''/''N'00, A, 1, X, 1, INFO )
116          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
117          INFOT = 3
118          CALL STRTRS( 'U''N''/'00, A, 1, X, 1, INFO )
119          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
120          INFOT = 4
121          CALL STRTRS( 'U''N''N'-10, A, 1, X, 1, INFO )
122          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
123          INFOT = 5
124          CALL STRTRS( 'U''N''N'0-1, A, 1, X, 1, INFO )
125          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
126          INFOT = 7
127          CALL STRTRS( 'U''N''N'21, A, 1, X, 2, INFO )
128          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
129          INFOT = 9
130          CALL STRTRS( 'U''N''N'21, A, 2, X, 1, INFO )
131          CALL CHKXER( 'STRTRS', INFOT, NOUT, LERR, OK )
132 *
133 *        STRRFS
134 *
135          SRNAMT = 'STRRFS'
136          INFOT = 1
137          CALL STRRFS( '/''N''N'00, A, 1, B, 1, X, 1, R1, R2, W,
138      $                IW, INFO )
139          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
140          INFOT = 2
141          CALL STRRFS( 'U''/''N'00, A, 1, B, 1, X, 1, R1, R2, W,
142      $                IW, INFO )
143          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
144          INFOT = 3
145          CALL STRRFS( 'U''N''/'00, A, 1, B, 1, X, 1, R1, R2, W,
146      $                IW, INFO )
147          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
148          INFOT = 4
149          CALL STRRFS( 'U''N''N'-10, A, 1, B, 1, X, 1, R1, R2, W,
150      $                IW, INFO )
151          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
152          INFOT = 5
153          CALL STRRFS( 'U''N''N'0-1, A, 1, B, 1, X, 1, R1, R2, W,
154      $                IW, INFO )
155          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
156          INFOT = 7
157          CALL STRRFS( 'U''N''N'21, A, 1, B, 2, X, 2, R1, R2, W,
158      $                IW, INFO )
159          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
160          INFOT = 9
161          CALL STRRFS( 'U''N''N'21, A, 2, B, 1, X, 2, R1, R2, W,
162      $                IW, INFO )
163          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
164          INFOT = 11
165          CALL STRRFS( 'U''N''N'21, A, 2, B, 2, X, 1, R1, R2, W,
166      $                IW, INFO )
167          CALL CHKXER( 'STRRFS', INFOT, NOUT, LERR, OK )
168 *
169 *        STRCON
170 *
171          SRNAMT = 'STRCON'
172          INFOT = 1
173          CALL STRCON( '/''U''N'0, A, 1, RCOND, W, IW, INFO )
174          CALL CHKXER( 'STRCON', INFOT, NOUT, LERR, OK )
175          INFOT = 2
176          CALL STRCON( '1''/''N'0, A, 1, RCOND, W, IW, INFO )
177          CALL CHKXER( 'STRCON', INFOT, NOUT, LERR, OK )
178          INFOT = 3
179          CALL STRCON( '1''U''/'0, A, 1, RCOND, W, IW, INFO )
180          CALL CHKXER( 'STRCON', INFOT, NOUT, LERR, OK )
181          INFOT = 4
182          CALL STRCON( '1''U''N'-1, A, 1, RCOND, W, IW, INFO )
183          CALL CHKXER( 'STRCON', INFOT, NOUT, LERR, OK )
184          INFOT = 6
185          CALL STRCON( '1''U''N'2, A, 1, RCOND, W, IW, INFO )
186          CALL CHKXER( 'STRCON', INFOT, NOUT, LERR, OK )
187 *
188 *        SLATRS
189 *
190          SRNAMT = 'SLATRS'
191          INFOT = 1
192          CALL SLATRS( '/''N''N''N'0, A, 1, X, SCALE, W, INFO )
193          CALL CHKXER( 'SLATRS', INFOT, NOUT, LERR, OK )
194          INFOT = 2
195          CALL SLATRS( 'U''/''N''N'0, A, 1, X, SCALE, W, INFO )
196          CALL CHKXER( 'SLATRS', INFOT, NOUT, LERR, OK )
197          INFOT = 3
198          CALL SLATRS( 'U''N''/''N'0, A, 1, X, SCALE, W, INFO )
199          CALL CHKXER( 'SLATRS', INFOT, NOUT, LERR, OK )
200          INFOT = 4
201          CALL SLATRS( 'U''N''N''/'0, A, 1, X, SCALE, W, INFO )
202          CALL CHKXER( 'SLATRS', INFOT, NOUT, LERR, OK )
203          INFOT = 5
204          CALL SLATRS( 'U''N''N''N'-1, A, 1, X, SCALE, W, INFO )
205          CALL CHKXER( 'SLATRS', INFOT, NOUT, LERR, OK )
206          INFOT = 7
207          CALL SLATRS( 'U''N''N''N'2, A, 1, X, SCALE, W, INFO )
208          CALL CHKXER( 'SLATRS', INFOT, NOUT, LERR, OK )
209 *
210       ELSE IF( LSAMEN( 2, C2, 'TP' ) ) THEN
211 *
212 *        Test error exits for the packed triangular routines.
213 *
214 *        STPTRI
215 *
216          SRNAMT = 'STPTRI'
217          INFOT = 1
218          CALL STPTRI( '/''N'0, A, INFO )
219          CALL CHKXER( 'STPTRI', INFOT, NOUT, LERR, OK )
220          INFOT = 2
221          CALL STPTRI( 'U''/'0, A, INFO )
222          CALL CHKXER( 'STPTRI', INFOT, NOUT, LERR, OK )
223          INFOT = 3
224          CALL STPTRI( 'U''N'-1, A, INFO )
225          CALL CHKXER( 'STPTRI', INFOT, NOUT, LERR, OK )
226 *
227 *        STPTRS
228 *
229          SRNAMT = 'STPTRS'
230          INFOT = 1
231          CALL STPTRS( '/''N''N'00, A, X, 1, INFO )
232          CALL CHKXER( 'STPTRS', INFOT, NOUT, LERR, OK )
233          INFOT = 2
234          CALL STPTRS( 'U''/''N'00, A, X, 1, INFO )
235          CALL CHKXER( 'STPTRS', INFOT, NOUT, LERR, OK )
236          INFOT = 3
237          CALL STPTRS( 'U''N''/'00, A, X, 1, INFO )
238          CALL CHKXER( 'STPTRS', INFOT, NOUT, LERR, OK )
239          INFOT = 4
240          CALL STPTRS( 'U''N''N'-10, A, X, 1, INFO )
241          CALL CHKXER( 'STPTRS', INFOT, NOUT, LERR, OK )
242          INFOT = 5
243          CALL STPTRS( 'U''N''N'0-1, A, X, 1, INFO )
244          CALL CHKXER( 'STPTRS', INFOT, NOUT, LERR, OK )
245          INFOT = 8
246          CALL STPTRS( 'U''N''N'21, A, X, 1, INFO )
247          CALL CHKXER( 'STPTRS', INFOT, NOUT, LERR, OK )
248 *
249 *        STPRFS
250 *
251          SRNAMT = 'STPRFS'
252          INFOT = 1
253          CALL STPRFS( '/''N''N'00, A, B, 1, X, 1, R1, R2, W, IW,
254      $                INFO )
255          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
256          INFOT = 2
257          CALL STPRFS( 'U''/''N'00, A, B, 1, X, 1, R1, R2, W, IW,
258      $                INFO )
259          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
260          INFOT = 3
261          CALL STPRFS( 'U''N''/'00, A, B, 1, X, 1, R1, R2, W, IW,
262      $                INFO )
263          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
264          INFOT = 4
265          CALL STPRFS( 'U''N''N'-10, A, B, 1, X, 1, R1, R2, W,
266      $                IW, INFO )
267          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
268          INFOT = 5
269          CALL STPRFS( 'U''N''N'0-1, A, B, 1, X, 1, R1, R2, W,
270      $                IW, INFO )
271          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
272          INFOT = 8
273          CALL STPRFS( 'U''N''N'21, A, B, 1, X, 2, R1, R2, W, IW,
274      $                INFO )
275          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
276          INFOT = 10
277          CALL STPRFS( 'U''N''N'21, A, B, 2, X, 1, R1, R2, W, IW,
278      $                INFO )
279          CALL CHKXER( 'STPRFS', INFOT, NOUT, LERR, OK )
280 *
281 *        STPCON
282 *
283          SRNAMT = 'STPCON'
284          INFOT = 1
285          CALL STPCON( '/''U''N'0, A, RCOND, W, IW, INFO )
286          CALL CHKXER( 'STPCON', INFOT, NOUT, LERR, OK )
287          INFOT = 2
288          CALL STPCON( '1''/''N'0, A, RCOND, W, IW, INFO )
289          CALL CHKXER( 'STPCON', INFOT, NOUT, LERR, OK )
290          INFOT = 3
291          CALL STPCON( '1''U''/'0, A, RCOND, W, IW, INFO )
292          CALL CHKXER( 'STPCON', INFOT, NOUT, LERR, OK )
293          INFOT = 4
294          CALL STPCON( '1''U''N'-1, A, RCOND, W, IW, INFO )
295          CALL CHKXER( 'STPCON', INFOT, NOUT, LERR, OK )
296 *
297 *        SLATPS
298 *
299          SRNAMT = 'SLATPS'
300          INFOT = 1
301          CALL SLATPS( '/''N''N''N'0, A, X, SCALE, W, INFO )
302          CALL CHKXER( 'SLATPS', INFOT, NOUT, LERR, OK )
303          INFOT = 2
304          CALL SLATPS( 'U''/''N''N'0, A, X, SCALE, W, INFO )
305          CALL CHKXER( 'SLATPS', INFOT, NOUT, LERR, OK )
306          INFOT = 3
307          CALL SLATPS( 'U''N''/''N'0, A, X, SCALE, W, INFO )
308          CALL CHKXER( 'SLATPS', INFOT, NOUT, LERR, OK )
309          INFOT = 4
310          CALL SLATPS( 'U''N''N''/'0, A, X, SCALE, W, INFO )
311          CALL CHKXER( 'SLATPS', INFOT, NOUT, LERR, OK )
312          INFOT = 5
313          CALL SLATPS( 'U''N''N''N'-1, A, X, SCALE, W, INFO )
314          CALL CHKXER( 'SLATPS', INFOT, NOUT, LERR, OK )
315 *
316       ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
317 *
318 *        Test error exits for the banded triangular routines.
319 *
320 *        STBTRS
321 *
322          SRNAMT = 'STBTRS'
323          INFOT = 1
324          CALL STBTRS( '/''N''N'000, A, 1, X, 1, INFO )
325          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
326          INFOT = 2
327          CALL STBTRS( 'U''/''N'000, A, 1, X, 1, INFO )
328          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
329          INFOT = 3
330          CALL STBTRS( 'U''N''/'000, A, 1, X, 1, INFO )
331          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
332          INFOT = 4
333          CALL STBTRS( 'U''N''N'-100, A, 1, X, 1, INFO )
334          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
335          INFOT = 5
336          CALL STBTRS( 'U''N''N'0-10, A, 1, X, 1, INFO )
337          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
338          INFOT = 6
339          CALL STBTRS( 'U''N''N'00-1, A, 1, X, 1, INFO )
340          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
341          INFOT = 8
342          CALL STBTRS( 'U''N''N'211, A, 1, X, 2, INFO )
343          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
344          INFOT = 10
345          CALL STBTRS( 'U''N''N'201, A, 1, X, 1, INFO )
346          CALL CHKXER( 'STBTRS', INFOT, NOUT, LERR, OK )
347 *
348 *        STBRFS
349 *
350          SRNAMT = 'STBRFS'
351          INFOT = 1
352          CALL STBRFS( '/''N''N'000, A, 1, B, 1, X, 1, R1, R2,
353      $                W, IW, INFO )
354          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
355          INFOT = 2
356          CALL STBRFS( 'U''/''N'000, A, 1, B, 1, X, 1, R1, R2,
357      $                W, IW, INFO )
358          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
359          INFOT = 3
360          CALL STBRFS( 'U''N''/'000, A, 1, B, 1, X, 1, R1, R2,
361      $                W, IW, INFO )
362          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
363          INFOT = 4
364          CALL STBRFS( 'U''N''N'-100, A, 1, B, 1, X, 1, R1, R2,
365      $                W, IW, INFO )
366          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
367          INFOT = 5
368          CALL STBRFS( 'U''N''N'0-10, A, 1, B, 1, X, 1, R1, R2,
369      $                W, IW, INFO )
370          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
371          INFOT = 6
372          CALL STBRFS( 'U''N''N'00-1, A, 1, B, 1, X, 1, R1, R2,
373      $                W, IW, INFO )
374          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
375          INFOT = 8
376          CALL STBRFS( 'U''N''N'211, A, 1, B, 2, X, 2, R1, R2,
377      $                W, IW, INFO )
378          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
379          INFOT = 10
380          CALL STBRFS( 'U''N''N'211, A, 2, B, 1, X, 2, R1, R2,
381      $                W, IW, INFO )
382          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
383          INFOT = 12
384          CALL STBRFS( 'U''N''N'211, A, 2, B, 2, X, 1, R1, R2,
385      $                W, IW, INFO )
386          CALL CHKXER( 'STBRFS', INFOT, NOUT, LERR, OK )
387 *
388 *        STBCON
389 *
390          SRNAMT = 'STBCON'
391          INFOT = 1
392          CALL STBCON( '/''U''N'00, A, 1, RCOND, W, IW, INFO )
393          CALL CHKXER( 'STBCON', INFOT, NOUT, LERR, OK )
394          INFOT = 2
395          CALL STBCON( '1''/''N'00, A, 1, RCOND, W, IW, INFO )
396          CALL CHKXER( 'STBCON', INFOT, NOUT, LERR, OK )
397          INFOT = 3
398          CALL STBCON( '1''U''/'00, A, 1, RCOND, W, IW, INFO )
399          CALL CHKXER( 'STBCON', INFOT, NOUT, LERR, OK )
400          INFOT = 4
401          CALL STBCON( '1''U''N'-10, A, 1, RCOND, W, IW, INFO )
402          CALL CHKXER( 'STBCON', INFOT, NOUT, LERR, OK )
403          INFOT = 5
404          CALL STBCON( '1''U''N'0-1, A, 1, RCOND, W, IW, INFO )
405          CALL CHKXER( 'STBCON', INFOT, NOUT, LERR, OK )
406          INFOT = 7
407          CALL STBCON( '1''U''N'21, A, 1, RCOND, W, IW, INFO )
408          CALL CHKXER( 'STBCON', INFOT, NOUT, LERR, OK )
409 *
410 *        SLATBS
411 *
412          SRNAMT = 'SLATBS'
413          INFOT = 1
414          CALL SLATBS( '/''N''N''N'00, A, 1, X, SCALE, W,
415      $                INFO )
416          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
417          INFOT = 2
418          CALL SLATBS( 'U''/''N''N'00, A, 1, X, SCALE, W,
419      $                INFO )
420          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
421          INFOT = 3
422          CALL SLATBS( 'U''N''/''N'00, A, 1, X, SCALE, W,
423      $                INFO )
424          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
425          INFOT = 4
426          CALL SLATBS( 'U''N''N''/'00, A, 1, X, SCALE, W,
427      $                INFO )
428          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
429          INFOT = 5
430          CALL SLATBS( 'U''N''N''N'-10, A, 1, X, SCALE, W,
431      $                INFO )
432          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
433          INFOT = 6
434          CALL SLATBS( 'U''N''N''N'1-1, A, 1, X, SCALE, W,
435      $                INFO )
436          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
437          INFOT = 8
438          CALL SLATBS( 'U''N''N''N'21, A, 1, X, SCALE, W,
439      $                INFO )
440          CALL CHKXER( 'SLATBS', INFOT, NOUT, LERR, OK )
441       END IF
442 *
443 *     Print a summary line.
444 *
445       CALL ALAESM( PATH, OK, NOUT )
446 *
447       RETURN
448 *
449 *     End of SERRTR
450 *
451       END