71 SUBROUTINE serred( PATH, NUNIT )
88 parameter( nmax = 4, one = 1.0e0, zero = 0.0e0 )
92 INTEGER I, IHI, ILO, INFO, J, NS, NT, SDIM
98 REAL A( NMAX, NMAX ), R1( NMAX ), R2( NMAX ),
99 $ S( NMAX ), U( NMAX, NMAX ), VL( NMAX, NMAX ),
100 $ VR( NMAX, NMAX ), VT( NMAX, NMAX ),
101 $ W( 10*NMAX ), WI( NMAX ), WR( NMAX )
108 LOGICAL SSLECT, LSAMEN
109 EXTERNAL sslect, lsamen
116 REAL SELWI( 20 ), SELWR( 20 )
121 INTEGER INFOT, NOUT, SELDIM, SELOPT
124 COMMON / infoc / infot, nout, ok, lerr
125 COMMON / srnamc / srnamt
126 COMMON / sslct / selopt, seldim, selval, selwr, selwi
131 WRITE( nout, fmt = * )
147 IF( lsamen( 2, c2,
'EV' ) )
THEN
153 CALL sgeev(
'X',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
155 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
157 CALL sgeev(
'N',
'X', 0, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
159 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
161 CALL sgeev(
'N',
'N', -1, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
163 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
165 CALL sgeev(
'N',
'N', 2, a, 1, wr, wi, vl, 1, vr, 1, w, 6,
167 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
169 CALL sgeev(
'V',
'N', 2, a, 2, wr, wi, vl, 1, vr, 1, w, 8,
171 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
173 CALL sgeev(
'N',
'V', 2, a, 2, wr, wi, vl, 1, vr, 1, w, 8,
175 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
177 CALL sgeev(
'V',
'V', 1, a, 1, wr, wi, vl, 1, vr, 1, w, 3,
179 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
182 ELSE IF( lsamen( 2, c2,
'ES' ) )
THEN
188 CALL sgees(
'X',
'N', sslect, 0, a, 1, sdim, wr, wi, vl, 1, w,
190 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
192 CALL sgees(
'N',
'X', sslect, 0, a, 1, sdim, wr, wi, vl, 1, w,
194 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
196 CALL sgees(
'N',
'S', sslect, -1, a, 1, sdim, wr, wi, vl, 1, w,
198 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
200 CALL sgees(
'N',
'S', sslect, 2, a, 1, sdim, wr, wi, vl, 1, w,
202 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
204 CALL sgees(
'V',
'S', sslect, 2, a, 2, sdim, wr, wi, vl, 1, w,
206 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
208 CALL sgees(
'N',
'S', sslect, 1, a, 1, sdim, wr, wi, vl, 1, w,
210 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
213 ELSE IF( lsamen( 2, c2,
'VX' ) )
THEN
219 CALL sgeevx(
'X',
'N',
'N',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1,
220 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
221 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
223 CALL sgeevx(
'N',
'X',
'N',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1,
224 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
225 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
227 CALL sgeevx(
'N',
'N',
'X',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1,
228 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
229 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
231 CALL sgeevx(
'N',
'N',
'N',
'X', 0, a, 1, wr, wi, vl, 1, vr, 1,
232 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
233 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
235 CALL sgeevx(
'N',
'N',
'N',
'N', -1, a, 1, wr, wi, vl, 1, vr,
236 $ 1, ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
237 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
239 CALL sgeevx(
'N',
'N',
'N',
'N', 2, a, 1, wr, wi, vl, 1, vr, 1,
240 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
241 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
243 CALL sgeevx(
'N',
'V',
'N',
'N', 2, a, 2, wr, wi, vl, 1, vr, 1,
244 $ ilo, ihi, s, abnrm, r1, r2, w, 6, iw, info )
245 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
247 CALL sgeevx(
'N',
'N',
'V',
'N', 2, a, 2, wr, wi, vl, 1, vr, 1,
248 $ ilo, ihi, s, abnrm, r1, r2, w, 6, iw, info )
249 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
251 CALL sgeevx(
'N',
'N',
'N',
'N', 1, a, 1, wr, wi, vl, 1, vr, 1,
252 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
253 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
255 CALL sgeevx(
'N',
'V',
'N',
'N', 1, a, 1, wr, wi, vl, 1, vr, 1,
256 $ ilo, ihi, s, abnrm, r1, r2, w, 2, iw, info )
257 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
259 CALL sgeevx(
'N',
'N',
'V',
'V', 1, a, 1, wr, wi, vl, 1, vr, 1,
260 $ ilo, ihi, s, abnrm, r1, r2, w, 3, iw, info )
261 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
264 ELSE IF( lsamen( 2, c2,
'SX' ) )
THEN
270 CALL sgeesx(
'X',
'N', sslect,
'N', 0, a, 1, sdim, wr, wi, vl,
271 $ 1, r1( 1 ), r2( 1 ), w, 1, iw, 1, b, info )
272 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
274 CALL sgeesx(
'N',
'X', sslect,
'N', 0, a, 1, sdim, wr, wi, vl,
275 $ 1, r1( 1 ), r2( 1 ), w, 1, iw, 1, b, info )
276 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
278 CALL sgeesx(
'N',
'N', sslect,
'X', 0, a, 1, sdim, wr, wi, vl,
279 $ 1, r1( 1 ), r2( 1 ), w, 1, iw, 1, b, info )
280 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
282 CALL sgeesx(
'N',
'N', sslect,
'N', -1, a, 1, sdim, wr, wi, vl,
283 $ 1, r1( 1 ), r2( 1 ), w, 1, iw, 1, b, info )
284 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
286 CALL sgeesx(
'N',
'N', sslect,
'N', 2, a, 1, sdim, wr, wi, vl,
287 $ 1, r1( 1 ), r2( 1 ), w, 6, iw, 1, b, info )
288 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
290 CALL sgeesx(
'V',
'N', sslect,
'N', 2, a, 2, sdim, wr, wi, vl,
291 $ 1, r1( 1 ), r2( 1 ), w, 6, iw, 1, b, info )
292 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
294 CALL sgeesx(
'N',
'N', sslect,
'N', 1, a, 1, sdim, wr, wi, vl,
295 $ 1, r1( 1 ), r2( 1 ), w, 2, iw, 1, b, info )
296 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
299 ELSE IF( lsamen( 2, c2,
'BD' ) )
THEN
305 CALL sgesvd(
'X',
'N', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, info )
306 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
308 CALL sgesvd(
'N',
'X', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, info )
309 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
311 CALL sgesvd(
'O',
'O', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, info )
312 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
314 CALL sgesvd(
'N',
'N', -1, 0, a, 1, s, u, 1, vt, 1, w, 1,
316 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
318 CALL sgesvd(
'N',
'N', 0, -1, a, 1, s, u, 1, vt, 1, w, 1,
320 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
322 CALL sgesvd(
'N',
'N', 2, 1, a, 1, s, u, 1, vt, 1, w, 5, info )
323 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
325 CALL sgesvd(
'A',
'N', 2, 1, a, 2, s, u, 1, vt, 1, w, 5, info )
326 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
328 CALL sgesvd(
'N',
'A', 1, 2, a, 1, s, u, 1, vt, 1, w, 5, info )
329 CALL chkxer(
'SGESVD', infot, nout, lerr, ok )
332 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
335 WRITE( nout, fmt = 9998 )
342 CALL sgesdd(
'X', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, iw, info )
343 CALL chkxer(
'SGESDD', infot, nout, lerr, ok )
345 CALL sgesdd(
'N', -1, 0, a, 1, s, u, 1, vt, 1, w, 1, iw, info )
346 CALL chkxer(
'SGESDD', infot, nout, lerr, ok )
348 CALL sgesdd(
'N', 0, -1, a, 1, s, u, 1, vt, 1, w, 1, iw, info )
349 CALL chkxer(
'SGESDD', infot, nout, lerr, ok )
351 CALL sgesdd(
'N', 2, 1, a, 1, s, u, 1, vt, 1, w, 5, iw, info )
352 CALL chkxer(
'SGESDD', infot, nout, lerr, ok )
354 CALL sgesdd(
'A', 2, 1, a, 2, s, u, 1, vt, 1, w, 5, iw, info )
355 CALL chkxer(
'SGESDD', infot, nout, lerr, ok )
357 CALL sgesdd(
'A', 1, 2, a, 1, s, u, 1, vt, 1, w, 5, iw, info )
358 CALL chkxer(
'SGESDD', infot, nout, lerr, ok )
361 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
364 WRITE( nout, fmt = 9998 )
371 CALL sgejsv(
'X',
'U',
'V',
'R',
'N',
'N',
372 $ 0, 0, a, 1, s, u, 1, vt, 1,
374 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
376 CALL sgejsv(
'G',
'X',
'V',
'R',
'N',
'N',
377 $ 0, 0, a, 1, s, u, 1, vt, 1,
379 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
381 CALL sgejsv(
'G',
'U',
'X',
'R',
'N',
'N',
382 $ 0, 0, a, 1, s, u, 1, vt, 1,
384 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
386 CALL sgejsv(
'G',
'U',
'V',
'X',
'N',
'N',
387 $ 0, 0, a, 1, s, u, 1, vt, 1,
389 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
391 CALL sgejsv(
'G',
'U',
'V',
'R',
'X',
'N',
392 $ 0, 0, a, 1, s, u, 1, vt, 1,
394 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
396 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'X',
397 $ 0, 0, a, 1, s, u, 1, vt, 1,
399 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
401 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
402 $ -1, 0, a, 1, s, u, 1, vt, 1,
404 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
406 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
407 $ 0, -1, a, 1, s, u, 1, vt, 1,
409 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
411 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
412 $ 2, 1, a, 1, s, u, 1, vt, 1,
414 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
416 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
417 $ 2, 2, a, 2, s, u, 1, vt, 2,
419 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
421 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
422 $ 2, 2, a, 2, s, u, 2, vt, 1,
424 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
427 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
430 WRITE( nout, fmt = 9998 )
437 CALL sgesvdx(
'X',
'N',
'A', 0, 0, a, 1, zero, zero,
438 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
439 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
441 CALL sgesvdx(
'N',
'X',
'A', 0, 0, a, 1, zero, zero,
442 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
443 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
445 CALL sgesvdx(
'N',
'N',
'X', 0, 0, a, 1, zero, zero,
446 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
447 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
449 CALL sgesvdx(
'N',
'N',
'A', -1, 0, a, 1, zero, zero,
450 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
451 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
453 CALL sgesvdx(
'N',
'N',
'A', 0, -1, a, 1, zero, zero,
454 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
455 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
457 CALL sgesvdx(
'N',
'N',
'A', 2, 1, a, 1, zero, zero,
458 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
459 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
461 CALL sgesvdx(
'N',
'N',
'V', 2, 1, a, 2, -one, zero,
462 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
463 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
465 CALL sgesvdx(
'N',
'N',
'V', 2, 1, a, 2, one, zero,
466 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
467 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
469 CALL sgesvdx(
'N',
'N',
'I', 2, 2, a, 2, zero, zero,
470 $ 0, 1, ns, s, u, 1, vt, 1, w, 1, iw, info )
471 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
473 CALL sgesvdx(
'V',
'N',
'I', 2, 2, a, 2, zero, zero,
474 $ 1, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
475 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
477 CALL sgesvdx(
'V',
'N',
'A', 2, 2, a, 2, zero, zero,
478 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
479 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
481 CALL sgesvdx(
'N',
'V',
'A', 2, 2, a, 2, zero, zero,
482 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
483 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
486 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
489 WRITE( nout, fmt = 9998 )
496 CALL sgesvdq(
'X',
'P',
'T',
'A',
'A', 0, 0, a, 1, s, u,
497 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
498 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
500 CALL sgesvdq(
'A',
'X',
'T',
'A',
'A', 0, 0, a, 1, s, u,
501 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
502 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
504 CALL sgesvdq(
'A',
'P',
'X',
'A',
'A', 0, 0, a, 1, s, u,
505 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
506 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
508 CALL sgesvdq(
'A',
'P',
'T',
'X',
'A', 0, 0, a, 1, s, u,
509 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
510 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
512 CALL sgesvdq(
'A',
'P',
'T',
'A',
'X', 0, 0, a, 1, s, u,
513 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
514 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
516 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', -1, 0, a, 1, s, u,
517 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
518 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
520 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', 0, 1, a, 1, s, u,
521 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
522 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
524 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 0, s, u,
525 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
526 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
528 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
529 $ -1, vt, 0, ns, iw, 1, w, 1, w, 1, info )
530 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
532 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
533 $ 1, vt, -1, ns, iw, 1, w, 1, w, 1, info )
534 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
536 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
537 $ 1, vt, 1, ns, iw, -5, w, 1, w, 1, info )
538 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
541 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
544 WRITE( nout, fmt = 9998 )
550 IF( .NOT.lsamen( 2, c2,
'BD' ) )
THEN
552 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
555 WRITE( nout, fmt = 9998 )
559 9999
FORMAT( 1x, a,
' passed the tests of the error exits (', i3,
561 9998
FORMAT(
' *** ', a,
' failed the tests of the error exits ***' )