84 parameter( nmax = 4, lw = 5*nmax )
86 parameter( one = 1.0e0, zero = 0.0e0 )
90 INTEGER I, IHI, ILO, INFO, J, NS, NT, SDIM
96 REAL R1( NMAX ), R2( NMAX ), RW( LW ), S( NMAX )
97 COMPLEX 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, CSLECT
107 EXTERNAL lsamen, cslect
114 REAL 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 cgeev(
'X',
'N', 0, a, 1, x, vl, 1, vr, 1, w, 1, rw,
153 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
155 CALL cgeev(
'N',
'X', 0, a, 1, x, vl, 1, vr, 1, w, 1, rw,
157 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
159 CALL cgeev(
'N',
'N', -1, a, 1, x, vl, 1, vr, 1, w, 1, rw,
161 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
163 CALL cgeev(
'N',
'N', 2, a, 1, x, vl, 1, vr, 1, w, 4, rw,
165 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
167 CALL cgeev(
'V',
'N', 2, a, 2, x, vl, 1, vr, 1, w, 4, rw,
169 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
171 CALL cgeev(
'N',
'V', 2, a, 2, x, vl, 1, vr, 1, w, 4, rw,
173 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
175 CALL cgeev(
'V',
'V', 1, a, 1, x, vl, 1, vr, 1, w, 1, rw,
177 CALL chkxer(
'CGEEV ', infot, nout, lerr, ok )
180 ELSE IF( lsamen( 2, c2,
'ES' ) )
THEN
186 CALL cgees(
'X',
'N', cslect, 0, a, 1, sdim, x, vl, 1, w, 1,
188 CALL chkxer(
'CGEES ', infot, nout, lerr, ok )
190 CALL cgees(
'N', 'x
', CSLECT, 0, A, 1, SDIM, X, VL, 1, W, 1,
192 CALL CHKXER( 'cgees ', INFOT, NOUT, LERR, OK )
194 CALL CGEES( 'n
', 's
', CSLECT, -1, A, 1, SDIM, X, VL, 1, W, 1,
196 CALL CHKXER( 'cgees ', INFOT, NOUT, LERR, OK )
198 CALL CGEES( 'n
', 's
', CSLECT, 2, A, 1, SDIM, X, VL, 1, W, 4,
200 CALL CHKXER( 'cgees ', INFOT, NOUT, LERR, OK )
202 CALL CGEES( 'v
', 's
', CSLECT, 2, A, 2, SDIM, X, VL, 1, W, 4,
204 CALL CHKXER( 'cgees ', INFOT, NOUT, LERR, OK )
206 CALL CGEES( 'n
', 's
', CSLECT, 1, A, 1, SDIM, X, VL, 1, W, 1,
208 CALL CHKXER( 'cgees ', INFOT, NOUT, LERR, OK )
211 ELSE IF( LSAMEN( 2, C2, 'vx
' ) ) THEN
217 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
221 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
225 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
229 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
233 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
237 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
241 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
245 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
249 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
253 CALL CGEEVX( '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( 'cgeevx', INFOT, NOUT, LERR, OK )
258 ELSE IF( LSAMEN( 2, C2, 'sx
' ) ) THEN
264 CALL CGEESX( 'x
', 'n
', CSLECT, 'n
', 0, A, 1, SDIM, X, VL, 1,
265 $ R1( 1 ), R2( 1 ), W, 1, RW, B, INFO )
266 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
268 CALL CGEESX( 'n
', 'x
', CSLECT, 'n
', 0, A, 1, SDIM, X, VL, 1,
269 $ R1( 1 ), R2( 1 ), W, 1, RW, B, INFO )
270 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
272 CALL CGEESX( 'n
', 'n
', CSLECT, 'x
', 0, A, 1, SDIM, X, VL, 1,
273 $ R1( 1 ), R2( 1 ), W, 1, RW, B, INFO )
274 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
276 CALL CGEESX( 'n
', 'n
', CSLECT, 'n
', -1, A, 1, SDIM, X, VL, 1,
277 $ R1( 1 ), R2( 1 ), W, 1, RW, B, INFO )
278 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
280 CALL CGEESX( 'n
', 'n
', CSLECT, 'n
', 2, A, 1, SDIM, X, VL, 1,
281 $ R1( 1 ), R2( 1 ), W, 4, RW, B, INFO )
282 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
284 CALL CGEESX( 'v
', 'n
', CSLECT, 'n
', 2, A, 2, SDIM, X, VL, 1,
285 $ R1( 1 ), R2( 1 ), W, 4, RW, B, INFO )
286 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
288 CALL CGEESX( 'n
', 'n
', CSLECT, 'n
', 1, A, 1, SDIM, X, VL, 1,
289 $ R1( 1 ), R2( 1 ), W, 1, RW, B, INFO )
290 CALL CHKXER( 'cgeesx', INFOT, NOUT, LERR, OK )
293 ELSE IF( LSAMEN( 2, C2, 'bd
' ) ) THEN
299 CALL CGESVD( 'x
', 'n
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, RW,
301 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
303 CALL CGESVD( 'n
', 'x
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, RW,
305 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
307 CALL CGESVD( 'o
', 'o
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, RW,
309 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
311 CALL CGESVD( 'n
', 'n
', -1, 0, A, 1, S, U, 1, VT, 1, W, 1, RW,
313 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
315 CALL CGESVD( 'n
', 'n
', 0, -1, A, 1, S, U, 1, VT, 1, W, 1, RW,
317 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
319 CALL CGESVD( 'n
', 'n
', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, RW,
321 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
323 CALL CGESVD( 'a
', 'n
', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, RW,
325 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
327 CALL CGESVD( 'n
', 'a
', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, RW,
329 CALL CHKXER( 'cgesvd', INFOT, NOUT, LERR, OK )
332 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
335 WRITE( NOUT, FMT = 9998 )
342 CALL CGESDD( 'x
', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, RW, IW,
344 CALL CHKXER( 'cgesdd', INFOT, NOUT, LERR, OK )
346 CALL CGESDD( 'n
', -1, 0, A, 1, S, U, 1, VT, 1, W, 1, RW, IW,
348 CALL CHKXER( 'cgesdd', INFOT, NOUT, LERR, OK )
350 CALL CGESDD( 'n
', 0, -1, A, 1, S, U, 1, VT, 1, W, 1, RW, IW,
352 CALL CHKXER( 'cgesdd', INFOT, NOUT, LERR, OK )
354 CALL CGESDD( 'n
', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, RW, IW,
356 CALL CHKXER( 'cgesdd', INFOT, NOUT, LERR, OK )
358 CALL CGESDD( 'a
', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, RW, IW,
360 CALL CHKXER( 'cgesdd', INFOT, NOUT, LERR, OK )
362 CALL CGESDD( 'a
', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, RW, IW,
364 CALL CHKXER( 'cgesdd', INFOT, NOUT, LERR, OK )
367 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
370 WRITE( NOUT, FMT = 9998 )
377 CALL CGEJSV( '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( 'cgejsv', INFOT, NOUT, LERR, OK )
382 CALL CGEJSV( '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( 'cgejsv', INFOT, NOUT, LERR, OK )
387 CALL CGEJSV( '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( 'cgejsv', INFOT, NOUT, LERR, OK )
392 CALL CGEJSV( '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( 'cgejsv', INFOT, NOUT, LERR, OK )
397 CALL CGEJSV( '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(
'CGEJSV', infot, nout, lerr, ok )
402 CALL cgejsv(
'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(
'CGEJSV', infot, nout, lerr, ok )
407 CALL cgejsv(
'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(
'CGEJSV', infot, nout, lerr, ok )
412 CALL cgejsv(
'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(
'CGEJSV', infot, nout, lerr, ok )
417 CALL cgejsv(
'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(
'CGEJSV', infot, nout, lerr, ok )
422 CALL cgejsv(
'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(
'CGEJSV', infot, nout, lerr, ok )
427 CALL cgejsv(
'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(
'CGEJSV', infot, nout, lerr, ok )
433 WRITE( nout, fmt = 9999 )srnamt( 1:len_trim( srnamt ) ),
436 WRITE( nout, fmt = 9998 )
443 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
447 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
451 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
455 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
459 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
463 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
467 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
471 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
475 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
479 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
483 CALL cgesvdx(
'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(
'CGESVDX', infot, nout, lerr, ok )
487 CALL cgesvdx( '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( 'cgesvdx', INFOT, NOUT, LERR, OK )
492 WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
495 WRITE( NOUT, FMT = 9998 )
502 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
506 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
510 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
514 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
518 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
522 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
526 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
530 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
534 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
538 CALL CGESVDQ( '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( 'cgesvdq', INFOT, NOUT, LERR, OK )
542 CALL CGESVDQ( '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( 'cgesvdq', 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
' )