84 parameter( nmax = 4, lw = 5*nmax )
85 DOUBLE PRECISION ONE, ZERO
86 parameter( one = 1.0d0, zero = 0.0d0 )
90 INTEGER I, IHI, ILO, INFO, , NS, NT, SDIM
91 DOUBLE PRECISION ABNRM
96 DOUBLE PRECISION R1( NMAX ), R2( NMAX ), RW( LW ), S( NMAX )
97 COMPLEX*16 A( NMAX, NMAX ), U( NMAX, NMAX ),
98 $ ( NMAX, NMAX ), VR( NMAX, NMAX ),
99 $ VT( NMAX, NMAX ), W( 10*NMAX ), X( NMAX )
106 LOGICAL LSAMEN, ZSLECT
107 EXTERNAL lsamen, zslect
114 DOUBLE PRECISION SELWI( 20 ), SELWR( 20 )
119 INTEGER INFOT, NOUT, SELDIM, SELOPT
122 COMMON / infoc / infot, nout, ok, lerr
123 COMMON / srnamc / srnamt
124 COMMON / sslct / selopt, seldim, selval, selwr, selwi
129 WRITE( nout, fmt = * )
145 IF( lsamen( 2, c2,
'EV' ) )
THEN
151 CALL zgeev(
'X',
'N', 0, a, 1, x, vl, 1, vr, 1, w, 1, rw,
153 CALL chkxer(
'ZGEEV ', infot, nout, lerr, ok )
155 CALL zgeev(
'N',
'X', 0, a, 1, x, vl, 1, vr, 1, w, 1, rw,
157 CALL chkxer(
'ZGEEV ', infot, nout, lerr, ok )
159 CALL zgeev(
'N',
'N', -1, a, 1, x, vl, 1, vr, 1, w, 1, rw,
161 CALL chkxer(
'ZGEEV ', infot, nout, lerr, ok )
163 CALL zgeev(
'N',
'N', 2, a, 1, x, vl, 1, vr, 1, w, 4, rw,
165 CALL chkxer(
'ZGEEV ', infot, nout, lerr, ok )
167 CALL zgeev(
'V', 'n
', 2, A, 2, X, VL, 1, VR, 1, W, 4, RW,
169 CALL CHKXER( 'zgeev ', INFOT, NOUT, LERR, OK )
171 CALL ZGEEV( 'n
', 'v
', 2, A, 2, X, VL, 1, VR, 1, W, 4, RW,
173 CALL CHKXER( 'zgeev ', INFOT, NOUT, LERR, OK )
175 CALL ZGEEV( 'v
', 'v
', 1, A, 1, X, VL, 1, VR, 1, W, 1, RW,
177 CALL CHKXER( 'zgeev ', INFOT, NOUT, LERR, OK )
180 ELSE IF( LSAMEN( 2, C2, 'es
' ) ) THEN
186 CALL ZGEES( 'x
', 'n
', ZSLECT, 0, A, 1, SDIM, X, VL, 1, W, 1,
188 CALL CHKXER( 'zgees ', INFOT, NOUT, LERR, OK )
190 CALL ZGEES( 'n
', 'x
', ZSLECT, 0, A, 1, SDIM, X, VL, 1, W, 1,
192 CALL CHKXER( 'zgees ', INFOT, NOUT, LERR, OK )
194 CALL ZGEES( 'n
', 's
', ZSLECT, -1, A, 1, SDIM, X, VL, 1, W, 1,
196 CALL CHKXER( 'zgees ', infot, nout, lerr, ok )
198 CALL zgees( 'n
', 's
', ZSLECT, 2, A, 1, SDIM, X, VL, 1, W, 4,
200 CALL CHKXER( 'zgees ', INFOT, NOUT, LERR, OK )
202 CALL ZGEES( 'v
', 's
', ZSLECT, 2, A, 2, SDIM, X, VL, 1, W, 4,
204 CALL CHKXER( 'zgees ', INFOT, NOUT, LERR, OK )
206 CALL ZGEES( 'n
', 's
', ZSLECT, 1, A, 1, SDIM, X, VL, 1, W, 1,
208 CALL CHKXER( 'zgees ', INFOT, NOUT, LERR, OK )
211 ELSE IF( LSAMEN( 2, C2, 'vx
' ) ) THEN
217 CALL ZGEEVX( 'x
', 'n
', 'n
', 'n', 0, a, 1, x, vl, 1, vr, 1, ilo,
218 $ ihi, s, abnrm, r1, r2, w, 1, rw, info )
219 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
221 CALL zgeevx(
'N',
'X',
'N',
'N', 0, a, 1, x, vl, 1, vr, 1, ilo,
222 $ ihi, s, abnrm, r1, r2, w, 1, rw, info )
225 CALL zgeevx(
'N',
'N',
'X',
'N', 0, a, 1, x, vl, 1, vr, 1, ilo,
226 $ ihi, s, abnrm, r1, r2, w, 1, rw, info )
227 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
229 CALL zgeevx(
'N',
'N',
'N',
'X', 0, a, 1, x, vl, 1, vr, 1, ilo,
230 $ ihi, s, abnrm, r1, r2, w, 1, rw, info )
233 CALL ZGEEVX( 'n
', 'n
', 'n
', 'n
', -1, A, 1, X, VL, 1, VR, 1,
234 $ ILO, IHI, S, ABNRM, R1, R2, W, 1, RW, INFO )
235 CALL CHKXER( 'zgeevx', INFOT, NOUT, LERR, OK )
237 CALL ZGEEVX( 'n',
'N',
'N',
'N', 2, a, 1, x, vl, 1, vr, 1, ilo,
238 $ ihi, s, abnrm, r1, r2, w, 4, rw, info )
239 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
241 CALL zgeevx(
'N',
'V',
'N',
'N', 2, a, 2, x, vl, 1, vr, 1, ilo,
242 $ ihi, s, abnrm, r1, r2, w, 4, rw, info )
243 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
245 CALL zgeevx(
'N',
'N',
'V',
'N', 2, a, 2, x, vl, 1, vr, 1, ilo,
246 $ ihi, s, abnrm, r1, r2, w, 4, rw, info )
247 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
249 CALL zgeevx(
'N',
'N',
'N',
'N', 1, a, 1, x, vl, 1, vr, 1, ilo,
250 $ ihi, s, abnrm, r1, r2, w, 1, rw, info )
251 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
253 CALL zgeevx(
'N',
'N',
'V',
'V', 1, a, 1, x, vl, 1, vr, 1, ilo,
254 $ ihi, s, abnrm, r1, r2, w, 2, rw, info )
255 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
258 ELSE IF( lsamen( 2, c2,
'SX' ) )
THEN
264 CALL zgeesx(
'X',
'N', zslect,
'N', 0, a, 1, sdim, x, vl, 1,
265 $ r1( 1 ), r2( 1 ), w, 1, rw, b, info )
266 CALL chkxer(
'ZGEESX', infot, nout, lerr, ok )
268 CALL zgeesx(
'N',
'X', zslect,
'N', 0, a, 1, sdim, x, vl, 1,
269 $ r1( 1 ), r2( 1 ), w, 1, rw, b, info )
270 CALL chkxer(
'ZGEESX', infot, nout, lerr, ok )
272 CALL zgeesx(
'N',
'N', zslect,
'X', 0, a, 1, sdim, x, vl, 1,
273 $ r1( 1 ), r2( 1 ), w, 1, rw, b, info )
274 CALL chkxer(
'ZGEESX', infot, nout, lerr, ok )
276 CALL zgeesx(
'N',
'N', zslect,
'N', -1, a, 1, sdim, x, vl, 1,
277 $ r1( 1 ), r2( 1 ), w, 1, rw, b, info )
278 CALL chkxer(
'ZGEESX', infot, nout, lerr, ok )
280 CALL zgeesx(
'N',
'N', zslect,
'N', 2, a, 1, sdim, x, vl, 1,
281 $ r1( 1 ), r2( 1 ), w, 4, rw, b, info )
282 CALL chkxer(
'ZGEESX', infot, nout, lerr, ok )
284 CALL zgeesx(
'V',
'N', zslect, 'n
', 2, A, 2, SDIM, X, VL, 1,
285 $ R1( 1 ), R2( 1 ), W, 4, RW, B, INFO )
286 CALL CHKXER( 'zgeesx', INFOT, NOUT, LERR, OK )
288 CALL ZGEESX( 'n
', 'n
', ZSLECT, 'n
', 1, A, 1, SDIM, X, VL, 1,
289 $ R1( 1 ), R2( 1 ), W, 1, RW, B, INFO )
290 CALL CHKXER( 'zgeesx', INFOT, NOUT, LERR, OK )
293 ELSE IF( LSAMEN( 2, C2, 'bd
' ) ) THEN
299 CALL ZGESVD( 'x
', 'n', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, rw,
301 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
303 CALL zgesvd(
'N',
'X', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, rw,
305 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
307 CALL zgesvd(
'O',
'O', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, rw,
309 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
311 CALL zgesvd(
'N',
'N', -1, 0, a, 1, s, u, 1, vt, 1, w, 1, rw,
313 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
315 CALL zgesvd(
'N',
'N', 0, -1, a, 1, s, u, 1, vt, 1, w, 1, rw,
317 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
319 CALL zgesvd(
'N',
'N', 2, 1, a, 1, s, u, 1,
321 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
323 CALL zgesvd(
'A',
'N', 2, 1, a, 2, s, u, 1, vt, 1, w, 5, rw,
325 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
327 CALL zgesvd(
'N',
'A', 1, 2, a, 1, s, u, 1, vt, 1, w, 5, rw,
329 CALL chkxer(
'ZGESVD', infot, nout, lerr, ok )
332 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
335 WRITE( nout, fmt = 9998 )
342 CALL zgesdd(
'X', 0, 0, a, 1, s, u, 1, vt, 1, w, 1, rw, iw,
344 CALL chkxer(
'ZGESDD', infot, nout, lerr, ok )
346 CALL zgesdd(
'N', -1, 0, a, 1, s, u, 1, vt, 1, w, 1, rw, iw,
348 CALL chkxer(
'ZGESDD', infot, nout, lerr, ok )
350 CALL zgesdd(
'N', 0, -1, a, 1, s, u, 1, vt, 1, w, 1, rw, iw,
354 CALL ZGESDD( 'n
', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, RW, IW,
356 CALL CHKXER( 'zgesdd', INFOT, NOUT, LERR, OK )
358 CALL ZGESDD( 'a
', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, RW, IW,
360 CALL CHKXER( 'zgesdd', INFOT, NOUT, LERR, OK )
362 CALL ZGESDD( 'a
', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, RW, IW,
364 CALL CHKXER( 'zgesdd', INFOT, NOUT, LERR, OK )
367 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
370 WRITE( NOUT, FMT = 9998 )
377 CALL ZGEJSV( 'x
', 'u
', 'v
', 'r
', 'n
', 'n
',
378 $ 0, 0, A, 1, S, U, 1, VT, 1,
379 $ W, 1, RW, 1, IW, INFO)
380 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
382 CALL ZGEJSV( 'g
', 'x
', 'v
', 'r
', 'n
', 'n
',
383 $ 0, 0, A, 1, S, U, 1, VT, 1,
384 $ W, 1, RW, 1, IW, INFO)
385 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
387 CALL ZGEJSV( 'g
', 'u
', 'x
', 'r
', 'n
', 'n
',
388 $ 0, 0, A, 1, S, U, 1, VT, 1,
389 $ W, 1, RW, 1, IW, INFO)
390 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
392 CALL ZGEJSV( 'g
', 'u
', 'v
', 'x
', 'n
', 'n
',
393 $ 0, 0, A, 1, S, U, 1, VT, 1,
394 $ W, 1, RW, 1, IW, INFO)
395 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
397 CALL ZGEJSV( 'g
', 'u
', 'v
', 'r
', 'x
', 'n
',
398 $ 0, 0, A, 1, S, U, 1, VT, 1,
399 $ W, 1, RW, 1, IW, INFO)
400 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
402 CALL ZGEJSV( 'g
', 'u
', 'v
', 'r
', 'n
', 'x
',
403 $ 0, 0, A, 1, S, U, 1, VT, 1,
404 $ W, 1, RW, 1, IW, INFO)
405 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
407 CALL ZGEJSV( 'g
', 'u
', 'v
', 'r
', 'n
', 'n
',
408 $ -1, 0, A, 1, S, U, 1, VT, 1,
409 $ W, 1, RW, 1, IW, INFO)
410 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
412 CALL ZGEJSV( 'g
', 'u
', 'v
', 'r
', 'n
', 'n
',
413 $ 0, -1, A, 1, S, U, 1, VT, 1,
414 $ W, 1, RW, 1, IW, INFO)
415 CALL CHKXER( 'zgejsv', INFOT, NOUT, LERR, OK )
417 CALL ZGEJSV( 'g
', 'u
', 'v
', 'r',
'N',
'N',
418 $ 2, 1, a, 1, s, u, 1, vt, 1,
419 $ w, 1, rw, 1, iw, info)
420 CALL chkxer(
'ZGEJSV', infot, nout, lerr, ok )
422 CALL zgejsv(
'G', 'u
', 'v
', 'r
', 'n
', 'n
',
423 $ 2, 2, A, 2, S, U, 1, VT, 2,
424 $ W, 1, RW, 1, IW, INFO)
425 CALL CHKXER( 'zgejsv', infot, nout, lerr, ok )
427 CALL zgejsv(
'G',
'U',
'V',
'R',
'N',
'N',
428 $ 2, 2, a, 2, s, u, 2, vt, 1,
429 $ w, 1, rw, 1, iw, info)
430 CALL chkxer(
'ZGEJSV', infot, nout, lerr, ok )
433 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
436 WRITE( nout, fmt = 9998 )
443 CALL zgesvdx(
'X',
'N',
'A', 0, 0, a, 1, zero, zero,
444 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
445 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
447 CALL zgesvdx(
'N',
'X',
'A', 0, 0, a, 1, zero, zero,
448 $ 0, 0, ns, s, u, 1, vt,
449 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
451 CALL zgesvdx(
'N',
'N',
'X', 0, 0, a, 1, zero, zero,
452 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
453 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
455 CALL zgesvdx(
'N',
'N',
'A', -1, 0, a, 1, zero, zero,
456 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
457 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
459 CALL zgesvdx(
'N',
'N',
'A', 0, -1, a, 1, zero, zero,
460 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
461 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
463 CALL zgesvdx(
'N',
'N',
'A', 2, 1, a, 1, zero, zero,
464 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
465 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
467 CALL zgesvdx(
'N',
'N',
'V', 2, 1, a, 2, -one, zero,
468 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
469 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
471 CALL zgesvdx(
'N',
'N',
'V', 2, 1, a, 2, one, zero,
472 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
473 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
475 CALL zgesvdx(
'N',
'N',
'I', 2, 2, a, 2, zero, zero,
476 $ 0, 1, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
477 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
479 CALL zgesvdx(
'V',
'N',
'I', 2, 2, a, 2, zero, zero,
480 $ 1, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
481 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
483 CALL zgesvdx(
'V',
'N',
'A', 2, 2, a, 2, zero, zero,
484 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
485 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
487 CALL zgesvdx(
'N',
'V',
'A', 2, 2, a, 2, zero, zero,
488 $ 0, 0, ns, s, u, 1, vt, 1, w, 1, rw, iw, info )
489 CALL chkxer(
'ZGESVDX', infot, nout, lerr, ok )
492 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
495 WRITE( nout, fmt = 9998 )
502 CALL zgesvdq(
'X',
'P',
'T',
'A',
'A', 0, 0, a, 1, s, u,
503 $ 0, vt, 0, ns, iw, 1, w, 1, rw, 1, info )
504 CALL chkxer(
'ZGESVDQ', infot, nout, lerr, ok )
506 CALL zgesvdq(
'A',
'X',
'T',
'A',
'A', 0, 0, a, 1, s, u,
507 $ 0, vt, 0, ns, iw, 1, w, 1, rw, 1, info )
508 CALL chkxer(
'ZGESVDQ', infot, nout, lerr, ok )
510 CALL zgesvdq(
'A',
'P',
'X', 'a
', 'a
', 0, 0, A, 1, S, U,
511 $ 0, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
512 CALL CHKXER( 'zgesvdq', INFOT, NOUT, LERR, OK )
514 CALL ZGESVDQ( 'a
', 'p
', 't
', 'x
', 'a
', 0, 0, A, 1, S, U,
515 $ 0, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
516 CALL CHKXER( 'zgesvdq', INFOT, NOUT, LERR, OK )
518 CALL ZGESVDQ( 'a
', 'p
', 't
', 'a
', 'x
', 0, 0, A, 1, S, U,
519 $ 0, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
520 CALL CHKXER( 'zgesvdq', INFOT, NOUT, LERR, OK )
522 CALL ZGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', -1, 0, A, 1, S, U,
523 $ 0, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
524 CALL CHKXER( 'zgesvdq', INFOT, NOUT, LERR, OK )
526 CALL ZGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', 0, 1, A, 1, S, U,
527 $ 0, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
528 CALL CHKXER( 'zgesvdq', INFOT, NOUT, LERR, OK )
530 CALL ZGESVDQ( 'a
', 'p
', 't
', 'a
', 'a
', 1, 1, A, 0, S, U,
531 $ 0, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
532 CALL CHKXER( 'zgesvdq', INFOT, NOUT, LERR, OK )
534 CALL ZGESVDQ( 'a',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
536 CALL chkxer(
'ZGESVDQ', infot, nout, lerr, ok )
538 CALL zgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
539 $ 1, vt, -1, ns, iw, 1, w, 1, rw, 1, info )
540 CALL chkxer(
'ZGESVDQ', infot, nout, lerr, ok )
542 CALL zgesvdq(
'A',
'P',
'T',
'A',
'A', 1, 1, a, 1, s, u,
543 $ 1, vt, 1, ns, iw, -5, w, 1, rw, 1, info )
544 CALL chkxer(
'ZGESVDQ', infot, nout, lerr, ok )
547 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
550 WRITE( nout, fmt = 9998 )
556 IF( .NOT.lsamen( 2, c2,
'BD' ) )
THEN
558 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
561 WRITE( nout, fmt = 9998 )
565 9999
FORMAT( 1x, a,
' passed the tests of the error exits (', i3,
567 9998
FORMAT(
' *** ', a,
' failed the tests of the error exits ***' )