3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
11 * SUBROUTINE SERRGE( PATH, NUNIT )
13 * .. Scalar Arguments ..
24 *> SERRGE tests the error exits for the REAL routines
25 *> for general matrices.
27 *> Note that this file is used only when the XBLAS are available,
28 *> otherwise serrge.f defines this subroutine.
36 *> PATH is CHARACTER*3
37 *> The LAPACK path name for the routines to be tested.
43 *> The unit number for output.
49 *> \author Univ. of Tennessee
50 *> \author Univ. of California Berkeley
51 *> \author Univ. of Colorado Denver
54 *> \date November 2011
56 *> \ingroup single_lin
58 * =====================================================================
59 SUBROUTINE SERRGE( PATH, NUNIT )
61 * -- LAPACK test routine (version 3.4.0) --
62 * -- LAPACK is a software package provided by Univ. of Tennessee, --
63 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
66 * .. Scalar Arguments ..
71 * =====================================================================
75 PARAMETER ( NMAX = 4, LW = 3*NMAX )
80 INTEGER I, INFO, J, N_ERR_BNDS, NPARAMS
81 REAL ANRM, CCOND, RCOND, BERR
84 INTEGER IP( NMAX ), IW( NMAX )
85 REAL A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
86 $ C( NMAX ), R( NMAX ), R1( NMAX ), R2( NMAX ),
87 $ W( LW ), X( NMAX ), ERR_BNDS_N( NMAX, 3 ),
88 $ ERR_BNDS_C( NMAX, 3 ), PARAMS( 1 )
90 * .. External Functions ..
94 * .. External Subroutines ..
95 EXTERNAL ALAESM, CHKXER, SGBCON, SGBEQU, SGBRFS, SGBTF2,
96 $ SGBTRF, SGBTRS, SGECON, SGEEQU, SGERFS, SGETF2,
97 $ SGETRF, SGETRI, SGETRS, SGEEQUB, SGERFSX,
100 * .. Scalars in Common ..
105 * .. Common blocks ..
106 COMMON / INFOC / INFOT, NOUT, OK, LERR
107 COMMON / SRNAMC / SRNAMT
109 * .. Intrinsic Functions ..
112 * .. Executable Statements ..
115 WRITE( NOUT, FMT = * )
118 * Set the variables to innocuous values.
122 A( I, J ) = 1. / REAL( I+J )
123 AF( I, J ) = 1. / REAL( I+J )
137 IF( LSAMEN( 2, C2, 'GE' ) ) THEN
139 * Test error exits of the routines that use the LU decomposition
140 * of a general matrix.
146 CALL SGETRF( -1, 0, A, 1, IP, INFO )
147 CALL CHKXER( 'SGETRF', INFOT, NOUT, LERR, OK )
149 CALL SGETRF( 0, -1, A, 1, IP, INFO )
150 CALL CHKXER( 'SGETRF', INFOT, NOUT, LERR, OK )
152 CALL SGETRF( 2, 1, A, 1, IP, INFO )
153 CALL CHKXER( 'SGETRF', INFOT, NOUT, LERR, OK )
159 CALL SGETF2( -1, 0, A, 1, IP, INFO )
160 CALL CHKXER( 'SGETF2', INFOT, NOUT, LERR, OK )
162 CALL SGETF2( 0, -1, A, 1, IP, INFO )
163 CALL CHKXER( 'SGETF2', INFOT, NOUT, LERR, OK )
165 CALL SGETF2( 2, 1, A, 1, IP, INFO )
166 CALL CHKXER( 'SGETF2', INFOT, NOUT, LERR, OK )
172 CALL SGETRI( -1, A, 1, IP, W, LW, INFO )
173 CALL CHKXER( 'SGETRI', INFOT, NOUT, LERR, OK )
175 CALL SGETRI( 2, A, 1, IP, W, LW, INFO )
176 CALL CHKXER( 'SGETRI', INFOT, NOUT, LERR, OK )
182 CALL SGETRS( '/', 0, 0, A, 1, IP, B, 1, INFO )
183 CALL CHKXER( 'SGETRS', INFOT, NOUT, LERR, OK )
185 CALL SGETRS( 'N', -1, 0, A, 1, IP, B, 1, INFO )
186 CALL CHKXER( 'SGETRS', INFOT, NOUT, LERR, OK )
188 CALL SGETRS( 'N', 0, -1, A, 1, IP, B, 1, INFO )
189 CALL CHKXER( 'SGETRS', INFOT, NOUT, LERR, OK )
191 CALL SGETRS( 'N', 2, 1, A, 1, IP, B, 2, INFO )
192 CALL CHKXER( 'SGETRS', INFOT, NOUT, LERR, OK )
194 CALL SGETRS( 'N', 2, 1, A, 2, IP, B, 1, INFO )
195 CALL CHKXER( 'SGETRS', INFOT, NOUT, LERR, OK )
201 CALL SGERFS( '/', 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2, W,
203 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
205 CALL SGERFS( 'N', -1, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
207 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
209 CALL SGERFS( 'N', 0, -1, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
211 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
213 CALL SGERFS( 'N', 2, 1, A, 1, AF, 2, IP, B, 2, X, 2, R1, R2, W,
215 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
217 CALL SGERFS( 'N', 2, 1, A, 2, AF, 1, IP, B, 2, X, 2, R1, R2, W,
219 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
221 CALL SGERFS( 'N', 2, 1, A, 2, AF, 2, IP, B, 1, X, 2, R1, R2, W,
223 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
225 CALL SGERFS( 'N', 2, 1, A, 2, AF, 2, IP, B, 2, X, 1, R1, R2, W,
227 CALL CHKXER( 'SGERFS', INFOT, NOUT, LERR, OK )
235 CALL SGERFSX( '/', EQ, 0, 0, A, 1, AF, 1, IP, R, C, B, 1, X,
236 $ 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
237 $ NPARAMS, PARAMS, W, IW, INFO )
238 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
241 CALL SGERFSX( 'N', EQ, 2, 1, A, 1, AF, 2, IP, R, C, B, 2, X,
242 $ 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
243 $ NPARAMS, PARAMS, W, IW, INFO )
244 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
247 CALL SGERFSX( 'N', EQ, -1, 0, A, 1, AF, 1, IP, R, C, B, 1, X,
248 $ 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
249 $ NPARAMS, PARAMS, W, IW, INFO )
250 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
252 CALL SGERFSX( 'N', EQ, 0, -1, A, 1, AF, 1, IP, R, C, B, 1, X,
253 $ 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
254 $ NPARAMS, PARAMS, W, IW, INFO )
255 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
257 CALL SGERFSX( 'N', EQ, 2, 1, A, 1, AF, 2, IP, R, C, B, 2, X,
258 $ 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
259 $ NPARAMS, PARAMS, W, IW, INFO )
260 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
262 CALL SGERFSX( 'N', EQ, 2, 1, A, 2, AF, 1, IP, R, C, B, 2, X,
263 $ 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
264 $ NPARAMS, PARAMS, W, IW, INFO )
265 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
268 CALL SGERFSX( 'N', EQ, 2, 1, A, 2, AF, 2, IP, R, C, B, 1, X,
269 $ 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
270 $ NPARAMS, PARAMS, W, IW, INFO )
271 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
273 CALL SGERFSX( 'N', EQ, 2, 1, A, 2, AF, 2, IP, R, C, B, 2, X,
274 $ 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
275 $ NPARAMS, PARAMS, W, IW, INFO )
276 CALL CHKXER( 'SGERFSX', INFOT, NOUT, LERR, OK )
282 CALL SGECON( '/', 0, A, 1, ANRM, RCOND, W, IW, INFO )
283 CALL CHKXER( 'SGECON', INFOT, NOUT, LERR, OK )
285 CALL SGECON( '1', -1, A, 1, ANRM, RCOND, W, IW, INFO )
286 CALL CHKXER( 'SGECON', INFOT, NOUT, LERR, OK )
288 CALL SGECON( '1', 2, A, 1, ANRM, RCOND, W, IW, INFO )
289 CALL CHKXER( 'SGECON', INFOT, NOUT, LERR, OK )
295 CALL SGEEQU( -1, 0, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
296 CALL CHKXER( 'SGEEQU', INFOT, NOUT, LERR, OK )
298 CALL SGEEQU( 0, -1, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
299 CALL CHKXER( 'SGEEQU', INFOT, NOUT, LERR, OK )
301 CALL SGEEQU( 2, 2, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
302 CALL CHKXER( 'SGEEQU', INFOT, NOUT, LERR, OK )
308 CALL SGEEQUB( -1, 0, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
309 CALL CHKXER( 'SGEEQUB', INFOT, NOUT, LERR, OK )
311 CALL SGEEQUB( 0, -1, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
312 CALL CHKXER( 'SGEEQUB', INFOT, NOUT, LERR, OK )
314 CALL SGEEQUB( 2, 2, A, 1, R1, R2, RCOND, CCOND, ANRM, INFO )
315 CALL CHKXER( 'SGEEQUB', INFOT, NOUT, LERR, OK )
317 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
319 * Test error exits of the routines that use the LU decomposition
320 * of a general band matrix.
326 CALL SGBTRF( -1, 0, 0, 0, A, 1, IP, INFO )
327 CALL CHKXER( 'SGBTRF', INFOT, NOUT, LERR, OK )
329 CALL SGBTRF( 0, -1, 0, 0, A, 1, IP, INFO )
330 CALL CHKXER( 'SGBTRF', INFOT, NOUT, LERR, OK )
332 CALL SGBTRF( 1, 1, -1, 0, A, 1, IP, INFO )
333 CALL CHKXER( 'SGBTRF', INFOT, NOUT, LERR, OK )
335 CALL SGBTRF( 1, 1, 0, -1, A, 1, IP, INFO )
336 CALL CHKXER( 'SGBTRF', INFOT, NOUT, LERR, OK )
338 CALL SGBTRF( 2, 2, 1, 1, A, 3, IP, INFO )
339 CALL CHKXER( 'SGBTRF', INFOT, NOUT, LERR, OK )
345 CALL SGBTF2( -1, 0, 0, 0, A, 1, IP, INFO )
346 CALL CHKXER( 'SGBTF2', INFOT, NOUT, LERR, OK )
348 CALL SGBTF2( 0, -1, 0, 0, A, 1, IP, INFO )
349 CALL CHKXER( 'SGBTF2', INFOT, NOUT, LERR, OK )
351 CALL SGBTF2( 1, 1, -1, 0, A, 1, IP, INFO )
352 CALL CHKXER( 'SGBTF2', INFOT, NOUT, LERR, OK )
354 CALL SGBTF2( 1, 1, 0, -1, A, 1, IP, INFO )
355 CALL CHKXER( 'SGBTF2', INFOT, NOUT, LERR, OK )
357 CALL SGBTF2( 2, 2, 1, 1, A, 3, IP, INFO )
358 CALL CHKXER( 'SGBTF2', INFOT, NOUT, LERR, OK )
364 CALL SGBTRS( '/', 0, 0, 0, 1, A, 1, IP, B, 1, INFO )
365 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
367 CALL SGBTRS( 'N', -1, 0, 0, 1, A, 1, IP, B, 1, INFO )
368 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
370 CALL SGBTRS( 'N', 1, -1, 0, 1, A, 1, IP, B, 1, INFO )
371 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
373 CALL SGBTRS( 'N', 1, 0, -1, 1, A, 1, IP, B, 1, INFO )
374 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
376 CALL SGBTRS( 'N', 1, 0, 0, -1, A, 1, IP, B, 1, INFO )
377 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
379 CALL SGBTRS( 'N', 2, 1, 1, 1, A, 3, IP, B, 2, INFO )
380 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
382 CALL SGBTRS( 'N', 2, 0, 0, 1, A, 1, IP, B, 1, INFO )
383 CALL CHKXER( 'SGBTRS', INFOT, NOUT, LERR, OK )
389 CALL SGBRFS( '/', 0, 0, 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
391 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
393 CALL SGBRFS( 'N', -1, 0, 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
395 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
397 CALL SGBRFS( 'N', 1, -1, 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
399 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
401 CALL SGBRFS( 'N', 1, 0, -1, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1,
403 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
405 CALL SGBRFS( 'N', 1, 0, 0, -1, A, 1, AF, 1, IP, B, 1, X, 1, R1,
407 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
409 CALL SGBRFS( 'N', 2, 1, 1, 1, A, 2, AF, 4, IP, B, 2, X, 2, R1,
411 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
413 CALL SGBRFS( 'N', 2, 1, 1, 1, A, 3, AF, 3, IP, B, 2, X, 2, R1,
415 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
417 CALL SGBRFS( 'N', 2, 0, 0, 1, A, 1, AF, 1, IP, B, 1, X, 2, R1,
419 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
421 CALL SGBRFS( 'N', 2, 0, 0, 1, A, 1, AF, 1, IP, B, 2, X, 1, R1,
423 CALL CHKXER( 'SGBRFS', INFOT, NOUT, LERR, OK )
431 CALL SGBRFSX( '/', EQ, 0, 0, 0, 0, A, 1, AF, 1, IP, R, C, B, 1,
432 $ X, 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
433 $ NPARAMS, PARAMS, W, IW, INFO )
434 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
437 CALL SGBRFSX( 'N', EQ, 2, 1, 1, 1, A, 1, AF, 2, IP, R, C, B, 2,
438 $ X, 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
439 $ NPARAMS, PARAMS, W, IW, INFO )
440 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
443 CALL SGBRFSX( 'N', EQ, -1, 1, 1, 0, A, 1, AF, 1, IP, R, C, B,
444 $ 1, X, 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
445 $ NPARAMS, PARAMS, W, IW, INFO )
446 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
449 CALL SGBRFSX( 'N', EQ, 2, -1, 1, 1, A, 3, AF, 4, IP, R, C, B,
450 $ 1, X, 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
451 $ NPARAMS, PARAMS, W, IW, INFO )
452 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
455 CALL SGBRFSX( 'N', EQ, 2, 1, -1, 1, A, 3, AF, 4, IP, R, C, B,
456 $ 1, X, 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
457 $ NPARAMS, PARAMS, W, IW, INFO )
458 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
460 CALL SGBRFSX( 'N', EQ, 0, 0, 0, -1, A, 1, AF, 1, IP, R, C, B,
461 $ 1, X, 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
462 $ NPARAMS, PARAMS, W, IW, INFO )
463 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
465 CALL SGBRFSX( 'N', EQ, 2, 1, 1, 1, A, 1, AF, 2, IP, R, C, B,
466 $ 2, X, 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
467 $ NPARAMS, PARAMS, W, IW, INFO )
468 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
470 CALL SGBRFSX( 'N', EQ, 2, 1, 1, 1, A, 3, AF, 3, IP, R, C, B, 2,
471 $ X, 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
472 $ NPARAMS, PARAMS, W, IW, INFO )
473 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
476 CALL SGBRFSX( 'N', EQ, 2, 1, 1, 1, A, 3, AF, 5, IP, R, C, B,
477 $ 1, X, 2, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
478 $ NPARAMS, PARAMS, W, IW, INFO )
479 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
481 CALL SGBRFSX( 'N', EQ, 2, 1, 1, 1, A, 3, AF, 5, IP, R, C, B, 2,
482 $ X, 1, RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C,
483 $ NPARAMS, PARAMS, W, IW, INFO )
484 CALL CHKXER( 'SGBRFSX', INFOT, NOUT, LERR, OK )
490 CALL SGBCON( '/', 0, 0, 0, A, 1, IP, ANRM, RCOND, W, IW, INFO )
491 CALL CHKXER( 'SGBCON', INFOT, NOUT, LERR, OK )
493 CALL SGBCON( '1', -1, 0, 0, A, 1, IP, ANRM, RCOND, W, IW,
495 CALL CHKXER( 'SGBCON', INFOT, NOUT, LERR, OK )
497 CALL SGBCON( '1', 1, -1, 0, A, 1, IP, ANRM, RCOND, W, IW,
499 CALL CHKXER( 'SGBCON', INFOT, NOUT, LERR, OK )
501 CALL SGBCON( '1', 1, 0, -1, A, 1, IP, ANRM, RCOND, W, IW,
503 CALL CHKXER( 'SGBCON', INFOT, NOUT, LERR, OK )
505 CALL SGBCON( '1', 2, 1, 1, A, 3, IP, ANRM, RCOND, W, IW, INFO )
506 CALL CHKXER( 'SGBCON', INFOT, NOUT, LERR, OK )
512 CALL SGBEQU( -1, 0, 0, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
514 CALL CHKXER( 'SGBEQU', INFOT, NOUT, LERR, OK )
516 CALL SGBEQU( 0, -1, 0, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
518 CALL CHKXER( 'SGBEQU', INFOT, NOUT, LERR, OK )
520 CALL SGBEQU( 1, 1, -1, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
522 CALL CHKXER( 'SGBEQU', INFOT, NOUT, LERR, OK )
524 CALL SGBEQU( 1, 1, 0, -1, A, 1, R1, R2, RCOND, CCOND, ANRM,
526 CALL CHKXER( 'SGBEQU', INFOT, NOUT, LERR, OK )
528 CALL SGBEQU( 2, 2, 1, 1, A, 2, R1, R2, RCOND, CCOND, ANRM,
530 CALL CHKXER( 'SGBEQU', INFOT, NOUT, LERR, OK )
536 CALL SGBEQUB( -1, 0, 0, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
538 CALL CHKXER( 'SGBEQUB', INFOT, NOUT, LERR, OK )
540 CALL SGBEQUB( 0, -1, 0, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
542 CALL CHKXER( 'SGBEQUB', INFOT, NOUT, LERR, OK )
544 CALL SGBEQUB( 1, 1, -1, 0, A, 1, R1, R2, RCOND, CCOND, ANRM,
546 CALL CHKXER( 'SGBEQUB', INFOT, NOUT, LERR, OK )
548 CALL SGBEQUB( 1, 1, 0, -1, A, 1, R1, R2, RCOND, CCOND, ANRM,
550 CALL CHKXER( 'SGBEQUB', INFOT, NOUT, LERR, OK )
552 CALL SGBEQUB( 2, 2, 1, 1, A, 2, R1, R2, RCOND, CCOND, ANRM,
554 CALL CHKXER( 'SGBEQUB', INFOT, NOUT, LERR, OK )
557 * Print a summary line.
559 CALL ALAESM( PATH, OK, NOUT )