84 DOUBLE PRECISION ONE, ZERO
85 parameter( nmax = 4, one = 1.0d0, zero = 0.0d0 )
89 INTEGER , IHI, ILO, INFO, J, NS, NT, SDIM
90 DOUBLE PRECISION ABNRM
95DOUBLE PRECISION A( NMAX, NMAX ), R1( NMAX ), R2( NMAX ),
96 $ S( NMAX ), U( NMAX, NMAX ), VL( NMAX, NMAX ),
97 $ VR( NMAX, NMAX ), VT( NMAX, NMAX ),
98 $ W( 10*NMAX ), WI( NMAX ), WR( NMAX )
105 LOGICAL DSLECT, LSAMEN
106 EXTERNAL dslect, lsamen
113 DOUBLE PRECISION 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 dgeev(
'X', 'n
', 0, A, 1, WR, WI, VL, 1, VR, 1, W, 1,
152 CALL CHKXER( 'dgeev ', INFOT, NOUT, LERR, OK )
154 CALL DGEEV( 'n
', 'x
', 0, A, 1, WR, WI, VL, 1, VR, 1, W, 1,
156 CALL CHKXER( 'dgeev ', INFOT, NOUT, LERR, OK )
158 CALL DGEEV( 'n',
'N', -1, a, 1, wr, wi, vl, 1, vr, 1, w, 1,
160 CALL chkxer(
'DGEEV ', infot, nout, lerr, ok )
162 CALL dgeev(
'N',
'N', 2, a, 1, wr, wi, vl, 1, vr, 1, w, 6,
164 CALL chkxer(
'DGEEV ', infot, nout, lerr, ok )
166 CALL dgeev(
'V',
'N', 2, a, 2, wr, wi, vl, 1, vr, 1, w, 8,
168 CALL chkxer(
'DGEEV ', infot, nout, lerr, ok )
170 CALL dgeev(
'N',
'V', 2, a, 2, wr, wi, vl, 1, vr, 1, w, 8,
172 CALL chkxer(
'DGEEV ', infot, nout, lerr, ok )
174 CALL dgeev(
'V',
'V', 1, a, 1, wr, wi, vl, 1, vr, 1, w, 3,
176 CALL chkxer(
'DGEEV ', infot, nout, lerr, ok )
179 ELSE IF( lsamen( 2, c2,
'ES' ) )
THEN
185 CALL dgees(
'X',
'N', dslect, 0, a, 1, sdim, wr, wi, vl, 1, w,
187 CALL chkxer(
'DGEES ', infot, nout, lerr, ok )
189 CALL dgees(
'N',
'X', dslect, 0, a, 1, sdim, wr, wi, vl, 1, w,
191 CALL chkxer(
'DGEES ', infot, nout, lerr, ok )
193 CALL dgees(
'N',
'S', dslect, -1, a, 1, sdim, wr, wi, vl, 1, w,
195 CALL chkxer(
'DGEES ', infot, nout, lerr, ok )
197 CALL dgees( 'n
', 's
', DSLECT, 2, A, 1, SDIM, WR, WI, VL, 1, W,
199 CALL CHKXER( 'dgees ', INFOT, NOUT, LERR, OK )
201 CALL DGEES( 'v
', 's
', DSLECT, 2, A, 2, SDIM, WR, WI, VL, 1, W,
203 CALL CHKXER( 'dgees ', INFOT, NOUT, LERR, OK )
205 CALL DGEES( 'n
', 's
', DSLECT, 1, A, 1, SDIM, WR, WI, VL, 1, W,
207 CALL CHKXER( 'dgees ', INFOT, NOUT, LERR, OK )
210 ELSE IF( LSAMEN( 2, C2, 'vx
' ) ) THEN
216 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
220 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
224 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
228 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
232 CALL DGEEVX( 'n
', 'n
', 'n
', 'n
', -1, A, 1, WR, WI, VL, 1, VR,
233 $ 1, ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
234 CALL CHKXER( 'dgeevx', INFOT, NOUT, LERR, OK )
236 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
240 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
244 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
248 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
252 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
256 CALL DGEEVX( '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( 'dgeevx', INFOT, NOUT, LERR, OK )
261 ELSE IF( LSAMEN( 2, C2, 'sx
' ) ) THEN
267 CALL DGEESX( 'x
', 'n
', DSLECT, 'n
', 0, A, 1, SDIM, WR, WI, VL,
268 $ 1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
269 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
271 CALL DGEESX( 'n
', 'x
', DSLECT, 'n
', 0, A, 1, SDIM, WR, WI, VL,
272 $ 1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
273 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
275 CALL DGEESX( 'n
', 'n
', DSLECT, 'x
', 0, A, 1, SDIM, WR, WI, VL,
276 $ 1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
277 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
279 CALL DGEESX( 'n
', 'n
', DSLECT, 'n
', -1, A, 1, SDIM, WR, WI, VL,
280 $ 1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
281 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
283 CALL DGEESX( 'n
', 'n
', DSLECT, 'n
', 2, A, 1, SDIM, WR, WI, VL,
284 $ 1, R1( 1 ), R2( 1 ), W, 6, IW, 1, B, INFO )
285 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
287 CALL DGEESX( 'v
', 'n
', DSLECT, 'n
', 2, A, 2, SDIM, WR, WI, VL,
288 $ 1, R1( 1 ), R2( 1 ), W, 6, IW, 1, B, INFO )
289 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
291 CALL DGEESX( 'n
', 'n
', DSLECT, 'n
', 1, A, 1, SDIM, WR, WI, VL,
292 $ 1, R1( 1 ), R2( 1 ), W, 2, IW, 1, B, INFO )
293 CALL CHKXER( 'dgeesx', INFOT, NOUT, LERR, OK )
296 ELSE IF( LSAMEN( 2, C2, 'bd
' ) ) THEN
302 CALL DGESVD( 'x
', 'n
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
303 CALL CHKXER( 'dgesvd', INFOT, NOUT, LERR, OK )
305 CALL DGESVD( 'n
', 'x
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
306 CALL CHKXER( 'dgesvd', INFOT, NOUT, LERR, OK )
308 CALL DGESVD( 'o
', 'o
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
309 CALL CHKXER( 'dgesvd', INFOT, NOUT, LERR, OK )
311 CALL DGESVD( 'n
', 'n
', -1, 0, A, 1, S, U, 1, VT, 1, W, 1,
313 CALL CHKXER( 'dgesvd', INFOT, NOUT, LERR, OK )
315 CALL DGESVD( 'n',
'N', 0, -1, a, 1, s, u, 1, vt, 1, w, 1,
317 CALL chkxer(
'DGESVD', infot, nout, lerr, ok )
319 CALL dgesvd(
'N',
'N', 2, 1, a, 1, s, u, 1, vt, 1, w, 5, info )
320 CALL chkxer(
'DGESVD', infot, nout, lerr, ok )
322 CALL dgesvd(
'A',
'N', 2, 1, a, 2, s, u, 1, vt, 1, w, 5, info )
323 CALL chkxer(
'DGESVD', infot, nout, lerr, ok )
325 CALL dgesvd(
'N',
'A', 1, 2, a, 1, s, u, 1, vt, 1, w, 5, info )
326 CALL chkxer(
'DGESVD', infot, nout, lerr, ok )
329 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
332 WRITE( nout, fmt = 9998 )
339 CALL dgesdd(
'X', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, iw, info )
340 CALL chkxer(
'DGESDD', infot, nout, lerr, ok )
342 CALL dgesdd(
'N', -1, 0, a, 1, s, u, 1, vt, 1, w, 1, iw, info )
343 CALL chkxer(
'DGESDD', infot, nout, lerr, ok )
345 CALL dgesdd(
'N', 0, -1, a, 1, s, u, 1, vt, 1, w, 1, iw, info )
346 CALL chkxer(
'DGESDD', infot, nout, lerr, ok )
348 CALL dgesdd(
'N', 2, 1, a, 1, s, u, 1, vt, 1, w, 5, iw, info )
349 CALL chkxer(
'DGESDD', infot, nout, lerr, ok )
351 CALL dgesdd(
'A', 2, 1, a, 2, s, u, 1, vt, 1, w, 5, iw, info )
352 CALL chkxer(
'DGESDD', infot, nout, lerr, ok )
354 CALL dgesdd(
'A', 1, 2, a, 1, s, u, 1, vt, 1, w, 5, iw, info )
355 CALL chkxer(
'DGESDD', infot, nout, lerr, ok )
358 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
361 WRITE( nout, fmt = 9998 )
368 CALL dgejsv(
'X',
'U',
'V',
'R',
'N',
'N',
369 $ 0, 0, a, 1, s, u, 1, vt, 1,
371 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
373 CALL dgejsv(
'G',
'X',
'V',
'R',
'N',
'N',
374 $ 0, 0, a, 1, s, u, 1, vt, 1,
376 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
378 CALL dgejsv(
'G',
'U',
'X',
'R',
'N',
'N',
379 $ 0, 0, a, 1, s, u, 1, vt, 1,
381 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
383 CALL dgejsv(
'G',
'U',
'V',
'X',
'N',
'N',
384 $ 0, 0, a, 1, s, u, 1, vt, 1,
386 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
388 CALL dgejsv(
'G',
'U',
'V',
'R',
'X',
'N',
389 $ 0, 0, a, 1, s, u, 1, vt, 1,
391 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
393 CALL dgejsv(
'G',
'U', 'v
', 'r
', 'n
', 'x
',
394 $ 0, 0, A, 1, S, U, 1, VT, 1,
396 CALL CHKXER( 'dgejsv', INFOT, NOUT, LERR, OK )
398 CALL DGEJSV( 'g
', 'u
', 'v
', 'r
', 'n
', 'n
',
399 $ -1, 0, A, 1, S, U, 1, VT, 1,
401 CALL CHKXER( 'dgejsv', infot, nout, lerr, ok )
403 CALL dgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
404 $ 0, -1, a, 1, s, u, 1, vt, 1,
406 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
408 CALL dgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
409 $ 2, 1, a, 1, s, u, 1, vt, 1,
411 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
413 CALL dgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
414 $ 2, 2, a, 2, s, u, 1, vt, 2,
416 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
418 CALL dgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
419 $ 2, 2, a, 2, s, u, 2, vt, 1,
421 CALL chkxer(
'DGEJSV', infot, nout, lerr, ok )
424 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
427 WRITE( nout, fmt = 9998 )
434 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
438 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
442 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
446 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
450 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
454 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
458 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
462 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
466 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
470 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
474 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
478 CALL dgesvdx(
'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(
'DGESVDX', infot, nout, lerr, ok )
483 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
486 WRITE( nout, fmt = 9998 )
493 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
497 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
501 CALL dgesvdq(
'A',
'P',
'X',
'A',
'A', 0, 0, a, 1, s, u,
502 $ 0, vt, 0, ns, iw, 1, w, 1, w, 1, info )
503 CALL chkxer(
'DGESVDQ', infot, nout, lerr, ok )
505 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
509 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
513 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
517 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
521 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
525 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
529 CALL dgesvdq(
'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(
'DGESVDQ', infot, nout, lerr, ok )
533 CALL dgesvdq(
'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(
'DGESVDQ', 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 ***' )