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 ), ( NMAX, NMAX ),
99 $ VT( NMAX, NMAX ), W( 10*NMAX ), X( NMAX )
114 REAL SELWI( 20 ), SELWR( 20 )
119 INTEGER , 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,
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
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 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 ***' )