85 parameter( nmax = 4, one = 1.0e0, zero = 0.0e0 )
89 INTEGER I, IHI, , INFO, J, NS, NT, SDIM
95 REAL A( NMAX, NMAX ), R1( NMAX ), R2( NMAX ),
96 $ S( ), U( NMAX, NMAX ), VL( , NMAX ),
97 $ VR( NMAX, NMAX ), VT( NMAX, NMAX ),
98 $ W( 10*NMAX ), WI( NMAX ), WR( NMAX )
105 LOGICAL SSLECT, LSAMEN
106 EXTERNAL sslect, lsamen
113 REAL SELWI( 20 ), SELWR( 20 )
118 INTEGER INFOT, NOUT, SELDIM, SELOPT
121 COMMON / infoc / infot, nout, ok, lerr
122 COMMON / srnamc / srnamt
123 COMMON / sslct / selopt, seldim, selval, selwr, selwi
128 WRITE( nout, fmt = * )
144 IF( lsamen( 2, c2,
'EV' ) )
THEN
150 CALL sgeev(
'X',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
152 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
154 CALL sgeev(
'N',
'X', 0, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
156 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
158 CALL sgeev(
'N',
'N', -1, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
160 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
162 CALL sgeev(
'N',
'N', 2, a, 1, wr, wi, vl, 1, vr, 1, w, 6,
164 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
166 CALL sgeev(
'V',
'N', 2, a, 2, wr, wi, vl, 1, vr, 1, w, 8,
168 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
170 CALL sgeev(
'N',
'V', 2, a, 2, wr, wi, vl, 1, vr, 1, w, 8,
172 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
174 CALL sgeev(
'V',
'V', 1, a, 1, wr, wi, vl, 1, vr, 1, w, 3,
176 CALL chkxer(
'SGEEV ', infot, nout, lerr, ok )
179 ELSE IF( lsamen( 2, c2,
'ES' ) )
THEN
185 CALL sgees(
'X',
'N', sslect, 0, a, 1, sdim, wr
187 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
189 CALL sgees(
'N',
'X', sslect, 0, a, 1, sdim, wr, wi, vl, 1, w,
191 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
193 CALL sgees(
'N',
'S', sslect, -1, a, 1, sdim, wr, wi, vl, 1, w,
195 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
197 CALL sgees(
'N',
'S', sslect, 2, a, 1, sdim, wr, wi, vl, 1, w,
199 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
201 CALL sgees(
'V',
'S', sslect, 2, a, 2, sdim, wr, wi, vl, 1, w,
203 CALL chkxer(
'SGEES ', infot, nout, lerr, ok )
205 CALL sgees(
'N',
'S', sslect, 1, a, 1, sdim, wr, wi, vl, 1, w,
207 CALL chkxer(
'SGEES ', infot, nout,
210 ELSE IF( lsamen( 2, c2,
'VX' ) )
THEN
216 CALL sgeevx(
'X',
'N',
'N',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1,
217 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
218 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
220 CALL sgeevx(
'N',
'X',
'N',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1,
221 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
222 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
224 CALL sgeevx(
'N',
'N',
'X',
'N', 0, a, 1, wr, wi, vl, 1, vr, 1,
225 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
226 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
228 CALL sgeevx(
'N',
'N',
'N',
'X', 0, a, 1, wr, wi, vl, 1, vr, 1,
229 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
230 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
232 CALL sgeevx(
'N',
'N',
'N',
'N', -1, a, 1, wr, wi, vl, 1, vr,
233 $ 1, ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
236 CALL SGEEVX( 'n
', 'n
', 'n
', 'n
', 2, A, 1, WR, WI, VL, 1, VR, 1,
237 $ ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
238 CALL CHKXER( 'sgeevx', INFOT, NOUT, LERR, OK )
240 CALL SGEEVX( 'n
', 'v
', 'n
', 'n
', 2, A, 2, WR, WI, VL, 1, VR, 1,
241 $ ILO, IHI, S, ABNRM, R1, R2, W, 6, IW, INFO )
242 CALL CHKXER( 'sgeevx', INFOT, NOUT, LERR, OK )
244 CALL SGEEVX( 'n
', 'n
', 'v
', 'n
', 2, A, 2, WR, WI, VL, 1, VR, 1,
245 $ ILO, IHI, S, ABNRM, R1, R2, W, 6, IW, INFO )
246 CALL CHKXER( 'sgeevx', INFOT, NOUT, LERR, OK )
248 CALL SGEEVX( 'n
', 'n
', 'n',
'N', 1, a, 1, wr, wi, vl, 1, vr, 1,
249 $ ilo, ihi, s, abnrm, r1, r2, w, 1, iw, info )
250 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
252 CALL sgeevx(
'N',
'V',
'N',
'N', 1, a, 1, wr, wi, vl, 1, vr, 1,
253 $ ilo, ihi, s, abnrm, r1, r2, w, 2, iw, info )
254 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
256 CALL sgeevx(
'N',
'N',
'V',
'V', 1, a, 1, wr, wi, vl, 1, vr, 1,
257 $ ilo, ihi, s, abnrm, r1, r2, w, 3, iw, info )
258 CALL chkxer(
'SGEEVX', infot, nout, lerr, ok )
261 ELSE IF( lsamen( 2, c2,
'SX' ) )
THEN
267 CALL sgeesx(
'X',
'N', sslect,
'N', 0, a, 1, sdim, wr, wi, vl,
268 $ 1, r1( 1 ), r2( 1 ), w, 1, iw, 1, b, info )
269 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
271 CALL sgeesx(
'N',
'X', sslect,
'N', 0, a, 1, sdim, wr, wi, vl,
272 $ 1, r1( 1 ), r2( 1 ), w, 1, iw, 1, b, info )
273 CALL chkxer(
'SGEESX', infot, nout, lerr, ok )
275 CALL sgeesx( 'n
', 'n
', SSLECT, 'x
', 0, A, 1, SDIM, WR, WI, VL,
276 $ 1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
277 CALL CHKXER( 'sgeesx', INFOT, NOUT, LERR, OK )
279 CALL SGEESX( 'n
', 'n
', SSLECT, 'n
', -1, A, 1, SDIM, WR, WI, VL,
280 $ 1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
281 CALL CHKXER( 'sgeesx', INFOT, NOUT, LERR, OK )
283 CALL SGEESX( 'n
', 'n
', SSLECT, 'n
', 2, A, 1, SDIM, WR, WI, VL,
284 $ 1, R1( 1 ), R2( 1 ), W, 6, IW, 1, B, INFO )
285 CALL CHKXER( 'sgeesx', INFOT, NOUT, LERR, OK )
287 CALL SGEESX( 'v
', 'n
', SSLECT, 'n
', 2, A, 2, SDIM, WR, WI, VL,
288 $ 1, R1( 1 ), R2( 1 ), W, 6, IW, 1, B, INFO )
289 CALL CHKXER( 'sgeesx', INFOT, NOUT, LERR, OK )
291 CALL SGEESX( 'n
', 'n
', SSLECT, 'n
', 1, A, 1, SDIM, WR, WI, VL,
292 $ 1, R1( 1 ), R2( 1 ), W, 2, IW, 1, B, INFO )
293 CALL CHKXER( 'sgeesx', INFOT, NOUT, LERR, OK )
296 ELSE IF( LSAMEN( 2, C2, 'bd
' ) ) THEN
302 CALL SGESVD( 'x
', 'n
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
303 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
305 CALL SGESVD( 'n
', 'x
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
306 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
308 CALL SGESVD( 'o
', 'o
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
309 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
311 CALL SGESVD( 'n
', 'n
', -1, 0, A, 1, S, U, 1, VT, 1, W, 1,
313 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
315 CALL SGESVD( 'n
', 'n
', 0, -1, A, 1, S, U, 1, VT, 1, W, 1,
317 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
319 CALL SGESVD( 'n
', 'n
', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, INFO )
320 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
322 CALL SGESVD( 'a
', 'n
', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, INFO )
323 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
325 CALL SGESVD( 'n
', 'a
', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, INFO )
326 CALL CHKXER( 'sgesvd', INFOT, NOUT, LERR, OK )
329 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
332 WRITE( NOUT, FMT = 9998 )
339 CALL SGESDD( 'x
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, IW, INFO )
340 CALL CHKXER( 'sgesdd', INFOT, NOUT, LERR, OK )
342 CALL SGESDD( 'n
', -1, 0, A, 1, S, U, 1, VT, 1, W, 1, IW, INFO )
343 CALL CHKXER( 'sgesdd', INFOT, NOUT, LERR, OK )
345 CALL SGESDD( 'n
', 0, -1, A, 1, S, U, 1, VT, 1, W, 1, IW, INFO )
346 CALL CHKXER( 'sgesdd', INFOT, NOUT, LERR, OK )
348 CALL SGESDD( 'n
', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, IW, INFO )
349 CALL CHKXER( 'sgesdd', INFOT, NOUT, LERR, OK )
351 CALL SGESDD( 'a
', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, IW, INFO )
352 CALL CHKXER( 'sgesdd', INFOT, NOUT, LERR, OK )
354 CALL SGESDD( 'a
', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, IW, INFO )
355 CALL CHKXER( 'sgesdd', INFOT, NOUT, LERR, OK )
358 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
361 WRITE( NOUT, FMT = 9998 )
368 CALL SGEJSV( 'x
', 'u
', 'v
', 'r
', 'n
', 'n
',
369 $ 0, 0, A, 1, S, U, 1, VT, 1,
371 CALL CHKXER( 'sgejsv', INFOT, NOUT, LERR, OK )
373 CALL SGEJSV( 'g
', 'x
', 'v
', 'r
', 'n',
'N',
374 $ 0, 0, a, 1, s, u, 1, vt, 1,
376 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
378 CALL sgejsv(
'G',
'U',
'X',
'R',
'N',
'N',
379 $ 0, 0, a, 1, s, u, 1, vt, 1,
381 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
383 CALL sgejsv(
'G',
'U',
'V',
'X',
'N',
'N',
384 $ 0, 0, a, 1, s, u, 1, vt, 1,
386 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
388 CALL sgejsv(
'G',
'U',
'V',
'R',
'X',
'N',
389 $ 0, 0, a, 1, s, u, 1, vt, 1,
391 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
393 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'X',
394 $ 0, 0, a, 1, s, u, 1, vt, 1,
396 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
398 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
399 $ -1, 0, a, 1, s, u, 1, vt, 1,
403 CALL SGEJSV( 'g
', 'u
', 'v
', 'r
', 'n
', 'n
',
404 $ 0, -1, A, 1, S, U, 1, VT, 1,
406 CALL CHKXER( 'sgejsv', INFOT, NOUT, LERR, OK )
408 CALL SGEJSV( 'g
', 'u
', 'v
', 'r',
'N',
'N',
409 $ 2, 1, a, 1, s, u, 1, vt, 1,
411 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
413 CALL sgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
414 $ 2, 2, a, 2, s, u, 1, vt, 2,
416 CALL chkxer(
'SGEJSV', infot, nout, lerr, ok )
418 CALL sgejsv(
'G',
'U',
'V',
'R', 'n
', 'n
',
419 $ 2, 2, A, 2, S, U, 2, VT, 1,
421 CALL CHKXER( 'sgejsv', INFOT, NOUT, LERR, OK )
424 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
427 WRITE( NOUT, FMT = 9998 )
434 CALL SGESVDX( 'x
', 'n
', 'a
', 0, 0, A, 1, ZERO, ZERO,
435 $ 0, 0, NS, S, U, 1, VT, 1, W, 1, IW, INFO )
436 CALL CHKXER( 'sgesvdx', INFOT, NOUT, LERR, OK )
438 CALL SGESVDX( 'n
', 'x
', 'a
', 0, 0, A, 1, ZERO, ZERO,
439 $ 0, 0, NS, S, U, 1, VT, 1, W, 1, IW, INFO )
440 CALL CHKXER( 'sgesvdx', INFOT, NOUT, LERR, OK )
442 CALL SGESVDX( 'n
', 'n
', 'x
', 0, 0, A, 1, ZERO, ZERO,
443 $ 0, 0, NS, S, U, 1, VT, 1, W, 1, IW, INFO )
444 CALL CHKXER( 'sgesvdx', INFOT, NOUT, LERR, OK )
446 CALL SGESVDX( 'n
', 'n
', 'a
', -1, 0, A, 1, ZERO, ZERO,
447 $ 0, 0, NS, S, U, 1, VT, 1, W, 1, IW, INFO )
448 CALL CHKXER( 'sgesvdx', INFOT, NOUT, LERR, OK )
450 CALL SGESVDX( 'n
', 'n
', 'a
', 0, -1, A, 1, ZERO, ZERO,
451 $ 0, 0, NS, S, U, 1, VT, 1, W, 1, IW, INFO )
452 CALL CHKXER( 'sgesvdx', INFOT, NOUT, LERR, OK )
454 CALL SGESVDX( 'n
', 'n
', 'a
', 2, 1, A, 1, ZERO, ZERO,
455 $ 0, 0, NS, S, U, 1, VT, 1, W, 1, IW, INFO )
456 CALL CHKXER( 'sgesvdx', INFOT, NOUT, LERR, OK )
458 CALL SGESVDX( 'n',
'N',
'V', 2, 1, a, 2, -one, zero,
459 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
460 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
462 CALL sgesvdx(
'N',
'N',
'V', 2, 1, a, 2, one, zero,
463 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
464 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
466 CALL sgesvdx(
'N',
'N',
'I', 2, 2, a, 2, zero, zero,
467 $ 0, 1, ns, s, u, 1, vt, 1, w, 1, iw, info )
468 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
470 CALL sgesvdx(
'V',
'N',
'I', 2, 2, a, 2, zero, zero,
471 $ 1, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
472 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
474 CALL sgesvdx(
'V',
'N',
'A', 2, 2, a, 2, zero, zero,
475 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
476 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
478 CALL sgesvdx(
'N',
'V',
'A', 2, 2, a, 2, zero, zero,
479 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, iw, info )
480 CALL chkxer(
'SGESVDX', infot, nout, lerr, ok )
483 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
486 WRITE( nout, fmt = 9998 )
493 CALL sgesvdq(
'X',
'P',
'T',
'A',
'A', 0, 0, a, 1, s, u,
494 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
495 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
497 CALL sgesvdq(
'A',
'X',
'T',
'A',
'A', 0, 0, a, 1, s, u,
498 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
499 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
501 CALL sgesvdq(
'A',
'P',
'X',
'A',
'A', 0, 0, a, 1, s, u,
502 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
505 CALL SGESVDQ( 'a
', 'p
', 't
', 'x
', 'a
', 0, 0, A, 1, S, U,
506 $ 0, VT, 0, NS, IW, 1, W, 1, W, 1, INFO )
507 CALL CHKXER( 'sgesvdq', INFOT, NOUT, LERR, OK )
509 CALL SGESVDQ( 'a
', 'p
', 't
', 'a
', 'x
', 0, 0, A, 1, S, U,
510 $ 0, VT, 0, NS, IW, 1, W, 1, W, 1, INFO )
511 CALL CHKXER( 'sgesvdq', INFOT, NOUT, LERR, OK )
513 CALL SGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', -1, 0, A, 1, S, U,
514 $ 0, VT, 0, NS, IW, 1, W, 1, W, 1, INFO )
515 CALL CHKXER( 'sgesvdq', INFOT, NOUT, LERR, OK )
517 CALL SGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', 0, 1, A, 1, S, U,
518 $ 0, VT, 0, NS, IW, 1, W, 1, W, 1, INFO )
519 CALL CHKXER( 'sgesvdq', INFOT, NOUT, LERR, OK )
521 CALL SGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', 1, 1, A, 0, S, U,
522 $ 0, VT, 0, NS, IW, 1, W, 1, W, 1, INFO )
523 CALL CHKXER( 'sgesvdq', INFOT, NOUT, LERR, OK )
525 CALL SGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', 1, 1, A, 1, S, U,
526 $ -1, VT, 0, NS, IW, 1, W, 1, W, 1, INFO )
527 CALL CHKXER( 'sgesvdq', INFOT, NOUT, LERR, OK )
529 CALL SGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', 1, 1, A, 1, S, U,
530 $ 1, VT, -1, NS, IW, 1, W, 1, W, 1, INFO )
531 CALL CHKXER( 'sgesvdq', infot, nout, lerr, ok )
533 CALL sgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
534 $ 1, vt, 1, ns, iw, -5, w, 1, w, 1, info )
535 CALL chkxer(
'SGESVDQ', infot, nout, lerr, ok )
538 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
541 WRITE( nout, fmt = 9998 )
547 IF( .NOT.lsamen( 2, c2,
'BD' ) )
THEN
549 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
552 WRITE( nout, fmt = 9998 )
556 9999
FORMAT( 1x, a,
' passed the tests of the error exits (', i3,
558 9998
FORMAT(
' *** ', a,
' failed the tests of the error exits ***' )