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, J, 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 $ VL( 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 )
223 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
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 )
231 CALL chkxer(
'ZGEEVX', infot, nout, lerr, ok )
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, VT, 1, W, 5, RW,
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,
352 CALL CHKXER( 'zgesdd', INFOT, NOUT, LERR, OK )
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, 1, W, 1, RW, IW, INFO )
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,
535 $ -1, VT, 0, NS, IW, 1, W, 1, RW, 1, INFO )
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.NOT.
IF( 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 ***
' )