331 SUBROUTINE cget24( COMP, JTYPE, THRESH, ISEED, NOUNIT, N, A, LDA,
332 $ H, HT, W, WT, WTMP, VS, LDVS, VS1, RCDEIN,
333 $ RCDVIN, NSLCT, ISLCT, ISRT, RESULT, WORK,
334 $ LWORK, RWORK, BWORK, INFO )
342 INTEGER INFO, ISRT, JTYPE, LDA, LDVS, LWORK, N, NOUNIT,
344 REAL RCDEIN, RCDVIN, THRESH
348 INTEGER ISEED( 4 ), ISLCT( * )
349 REAL RESULT( 17 ), RWORK( * )
350 COMPLEX A( LDA, * ), H( LDA, * ), HT( LDA, * ),
351 $ vs( ldvs, * ), vs1( ldvs, * ), w( * ),
352 $ work( * ), wt( * ), wtmp( * )
359 PARAMETER ( CZERO = ( 0.0e+0, 0.0e+0 ),
360 $ cone = ( 1.0e+0, 0.0e+0 ) )
362 parameter( zero = 0.0e+0, one = 1.0e+0 )
364 parameter( epsin = 5.9605e-8 )
368 INTEGER I, IINFO, ISORT, ITMP, J, KMIN, KNTEIG, RSUB,
370 REAL ANORM, EPS, RCNDE1, RCNDV1, RCONDE, RCONDV,
371 $ smlnum, tol, tolin, ulp, ulpinv, v, vricmp,
381 EXTERNAL CSLECT, CLANGE,
387 INTRINSIC abs, aimag,
max,
min, real
391 REAL SELWI( 20 ), SELWR( 20 )
394 INTEGER SELDIM, SELOPT
397 COMMON / sslct / selopt, seldim, selval, selwr, selwi
404 IF( thresh.LT.zero )
THEN
406 ELSE IF( nounit.LE.0 )
THEN
408 ELSE IF( n.LT.0 )
THEN
410 ELSE IF( lda.LT.1 .OR. lda.LT.n )
THEN
414 ELSE IF( lwork.LT.2*n )
THEN
419 CALL xerbla(
'CGET24', -info )
434 smlnum = slamch(
'Safe minimum' )
435 ulp = slamch(
'Precision' )
442 IF( isort.EQ.0 )
THEN
452 CALL clacpy(
'F', n, n, a, lda, h, lda )
453 CALL cgeesx(
'V', sort, cslect,
'N', n, h, lda, sdim, w, vs,
454 $ ldvs, rconde, rcondv, work, lwork, rwork, bwork,
456 IF( iinfo.NE.0 )
THEN
457 result( 1+rsub ) = ulpinv
458 IF( jtype.NE.22 )
THEN
459 WRITE( nounit, fmt = 9998 )
'CGEESX1', iinfo, n, jtype,
462 WRITE( nounit, fmt = 9999 )
'CGEESX1', iinfo, n,
468 IF( isort.EQ.0 )
THEN
474 result( 1+rsub ) = zero
477 IF( h( i, j ).NE.czero )
478 $ result( 1+rsub ) = ulpinv
486 CALL clacpy(
' ', n, n, a, lda, vs1, ldvs )
490 CALL cgemm(
'No transpose',
'No transpose', n, n, n, cone, vs,
491 $ ldvs, h, lda, czero, ht, lda )
495 CALL cgemm(
'No transpose',
'Conjugate transpose', n, n, n,
496 $ -cone, ht, lda, vs, ldvs, cone, vs1, ldvs )
498 anorm =
max( clange(
'1', n, n, a, lda, rwork ), smlnum )
499 wnorm = clange( '1
', N, N, VS1, LDVS, RWORK )
501.GT.
IF( ANORMWNORM ) THEN
502 RESULT( 2+RSUB ) = ( WNORM / ANORM ) / ( N*ULP )
504.LT.
IF( ANORMONE ) THEN
505 RESULT( 2+RSUB ) = ( MIN( WNORM, N*ANORM ) / ANORM ) /
508 RESULT( 2+RSUB ) = MIN( WNORM / ANORM, REAL( N ) ) /
515 CALL CUNT01( 'columns
', N, N, VS, LDVS, WORK, LWORK, RWORK,
520 RESULT( 4+RSUB ) = ZERO
522.NE.
IF( H( I, I )W( I ) )
523 $ RESULT( 4+RSUB ) = ULPINV
528 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
529 CALL CGEESX( 'n
', SORT, CSLECT, 'n
', N, HT, LDA, SDIM, WT, VS,
530 $ LDVS, RCONDE, RCONDV, WORK, LWORK, RWORK, BWORK,
532.NE.
IF( IINFO0 ) THEN
533 RESULT( 5+RSUB ) = ULPINV
534.NE.
IF( JTYPE22 ) THEN
535 WRITE( NOUNIT, FMT = 9998 )'cgeesx2
', IINFO, N, JTYPE,
538 WRITE( NOUNIT, FMT = 9999 )'cgeesx2
', IINFO, N,
545 RESULT( 5+RSUB ) = ZERO
548.NE.
IF( H( I, J )HT( I, J ) )
549 $ RESULT( 5+RSUB ) = ULPINV
555 RESULT( 6+RSUB ) = ZERO
557.NE.
IF( W( I )WT( I ) )
558 $ RESULT( 6+RSUB ) = ULPINV
563.EQ.
IF( ISORT1 ) THEN
567 IF( CSLECT( W( I ) ) )
568 $ KNTEIG = KNTEIG + 1
570.AND.
IF( CSLECT( W( I+1 ) )
571.NOT.
$ ( CSLECT( W( I ) ) ) )RESULT( 13 ) = ULPINV
575 $ RESULT( 13 ) = ULPINV
583.GE.
IF( LWORK( N*( N+1 ) ) / 2 ) THEN
590 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
591 CALL CGEESX( 'v
', SORT, CSLECT, 'b
', N, HT, LDA, SDIM1, WT,
592 $ VS1, LDVS, RCONDE, RCONDV, WORK, LWORK, RWORK,
594.NE.
IF( IINFO0 ) THEN
595 RESULT( 14 ) = ULPINV
596 RESULT( 15 ) = ULPINV
597.NE.
IF( JTYPE22 ) THEN
598 WRITE( NOUNIT, FMT = 9998 )'cgeesx3
', IINFO, N, JTYPE,
601 WRITE( NOUNIT, FMT = 9999 )'cgeesx3
', IINFO, N,
611.NE.
IF( W( I )WT( I ) )
612 $ RESULT( 10 ) = ULPINV
614.NE.
IF( H( I, J )HT( I, J ) )
615 $ RESULT( 11 ) = ULPINV
616.NE.
IF( VS( I, J )VS1( I, J ) )
617 $ RESULT( 12 ) = ULPINV
621 $ RESULT( 13 ) = ULPINV
625 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
626 CALL CGEESX( 'n
', SORT, CSLECT, 'b
', N, HT, LDA, SDIM1, WT,
627 $ VS1, LDVS, RCNDE1, RCNDV1, WORK, LWORK, RWORK,
629.NE.
IF( IINFO0 ) THEN
630 RESULT( 14 ) = ULPINV
631 RESULT( 15 ) = ULPINV
632.NE.
IF( JTYPE22 ) THEN
633 WRITE( NOUNIT, FMT = 9998 )'cgeesx4
', IINFO, N, JTYPE,
636 WRITE( NOUNIT, FMT = 9999 )'cgeesx4
', IINFO, N,
645.NE.
IF( RCNDE1RCONDE )
646 $ RESULT( 14 ) = ULPINV
647.NE.
IF( RCNDV1RCONDV )
648 $ RESULT( 15 ) = ULPINV
653.NE.
IF( W( I )WT( I ) )
654 $ RESULT( 10 ) = ULPINV
656.NE.
IF( H( I, J )HT( I, J ) )
657 $ RESULT( 11 ) = ULPINV
658.NE.
IF( VS( I, J )VS1( I, J ) )
659 $ RESULT( 12 ) = ULPINV
663 $ RESULT( 13 ) = ULPINV
667 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
668 CALL CGEESX( 'v
', SORT, CSLECT, 'e
', N, HT, LDA, SDIM1, WT,
669 $ VS1, LDVS, RCNDE1, RCNDV1, WORK, LWORK, RWORK,
671.NE.
IF( IINFO0 ) THEN
672 RESULT( 14 ) = ULPINV
673.NE.
IF( JTYPE22 ) THEN
674 WRITE( NOUNIT, FMT = 9998 )'cgeesx5
', IINFO, N, JTYPE,
677 WRITE( NOUNIT, FMT = 9999 )'cgeesx5
', IINFO, N,
686.NE.
IF( RCNDE1RCONDE )
687 $ RESULT( 14 ) = ULPINV
692.NE.
IF( W( I )WT( I ) )
693 $ RESULT( 10 ) = ULPINV
695.NE.
IF( H( I, J )HT( I, J ) )
696 $ RESULT( 11 ) = ULPINV
697.NE.
IF( VS( I, J )VS1( I, J ) )
698 $ RESULT( 12 ) = ULPINV
702 $ RESULT( 13 ) = ULPINV
706 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
707 CALL CGEESX( 'n
', SORT, CSLECT, 'e
', N, HT, LDA, SDIM1, WT,
708 $ VS1, LDVS, RCNDE1, RCNDV1, WORK, LWORK, RWORK,
710.NE.
IF( IINFO0 ) THEN
711 RESULT( 14 ) = ULPINV
712.NE.
IF( JTYPE22 ) THEN
713 WRITE( NOUNIT, FMT = 9998 )'cgeesx6
', IINFO, N, JTYPE,
716 WRITE( NOUNIT, FMT = 9999 )'cgeesx6
', IINFO, N,
725.NE.
IF( RCNDE1RCONDE )
726 $ RESULT( 14 ) = ULPINV
731.NE.
IF( W( I )WT( I ) )
732 $ RESULT( 10 ) = ULPINV
734.NE.
IF( H( I, J )HT( I, J ) )
735 $ RESULT( 11 ) = ULPINV
736.NE.
IF( VS( I, J )VS1( I, J ) )
737 $ RESULT( 12 ) = ULPINV
741 $ RESULT( 13 ) = ULPINV
745 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
746 CALL CGEESX( 'v
', SORT, CSLECT, 'v
', N, HT, LDA, SDIM1, WT,
747 $ VS1, LDVS, RCNDE1, RCNDV1, WORK, LWORK, RWORK,
749.NE.
IF( IINFO0 ) THEN
750 RESULT( 15 ) = ULPINV
751.NE.
IF( JTYPE22 ) THEN
752 WRITE( NOUNIT, FMT = 9998 )'cgeesx7
', IINFO, N, JTYPE,
755 WRITE( NOUNIT, FMT = 9999 )'cgeesx7
', IINFO, N,
764.NE.
IF( RCNDV1RCONDV )
765 $ RESULT( 15 ) = ULPINV
770.NE.
IF( W( I )WT( I ) )
771 $ RESULT( 10 ) = ULPINV
773.NE.
IF( H( I, J )HT( I, J ) )
774 $ RESULT( 11 ) = ULPINV
775.NE.
IF( VS( I, J )VS1( I, J ) )
776 $ RESULT( 12 ) = ULPINV
780 $ RESULT( 13 ) = ULPINV
784 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
785 CALL CGEESX( 'n
', SORT, CSLECT, 'v
', N, HT, LDA, SDIM1, WT,
786 $ VS1, LDVS, RCNDE1, RCNDV1, WORK, LWORK, RWORK,
788.NE.
IF( IINFO0 ) THEN
789 RESULT( 15 ) = ULPINV
790.NE.
IF( JTYPE22 ) THEN
791 WRITE( NOUNIT, FMT = 9998 )'cgeesx8
', IINFO, N, JTYPE,
794 WRITE( NOUNIT, FMT = 9999 )'cgeesx8
', IINFO, N,
803.NE.
IF( RCNDV1RCONDV )
804 $ RESULT( 15 ) = ULPINV
809.NE.
IF( W( I )WT( I ) )
810 $ RESULT( 10 ) = ULPINV
812.NE.
IF( H( I, J )HT( I, J ) )
813 $ RESULT( 11 ) = ULPINV
814.NE.
IF( VS( I, J )VS1( I, J ) )
815 $ RESULT( 12 ) = ULPINV
819 $ RESULT( 13 ) = ULPINV
836 EPS = MAX( ULP, EPSIN )
839 SELVAL( I ) = .FALSE.
840 SELWR( I ) = REAL( WTMP( I ) )
841 SELWI( I ) = AIMAG( WTMP( I ) )
846 VRIMIN = REAL( WTMP( I ) )
848 VRIMIN = AIMAG( WTMP( I ) )
852 VRICMP = REAL( WTMP( J ) )
854 VRICMP = AIMAG( WTMP( J ) )
856.LT.
IF( VRICMPVRIMIN ) THEN
862 WTMP( KMIN ) = WTMP( I )
865 IPNT( I ) = IPNT( KMIN )
869 SELVAL( IPNT( ISLCT( I ) ) ) = .TRUE.
874 CALL CLACPY( 'f
', N, N, A, LDA, HT, LDA )
875 CALL CGEESX( 'n
', 's
', CSLECT, 'b
', N, HT, LDA, SDIM1, WT, VS1,
876 $ LDVS, RCONDE, RCONDV, WORK, LWORK, RWORK, BWORK,
878.NE.
IF( IINFO0 ) THEN
879 RESULT( 16 ) = ULPINV
880 RESULT( 17 ) = ULPINV
881 WRITE( NOUNIT, FMT = 9999 )'cgeesx9
', IINFO, N, ISEED( 1 )
889 ANORM = CLANGE( '1
', N, N, A, LDA, RWORK )
890 V = MAX( REAL( N )*EPS*ANORM, SMLNUM )
893.GT.
IF( VRCONDV ) THEN
898.GT.
IF( VRCDVIN ) THEN
903 TOL = MAX( TOL, SMLNUM / EPS )
904 TOLIN = MAX( TOLIN, SMLNUM / EPS )
905.GT.
IF( EPS*( RCDEIN-TOLIN )RCONDE+TOL ) THEN
906 RESULT( 16 ) = ULPINV
907.GT.
ELSE IF( RCDEIN-TOLINRCONDE+TOL ) THEN
908 RESULT( 16 ) = ( RCDEIN-TOLIN ) / ( RCONDE+TOL )
909.LT.
ELSE IF( RCDEIN+TOLINEPS*( RCONDE-TOL ) ) THEN
910 RESULT( 16 ) = ULPINV
911.LT.
ELSE IF( RCDEIN+TOLINRCONDE-TOL ) THEN
912 RESULT( 16 ) = ( RCONDE-TOL ) / ( RCDEIN+TOLIN )
920.GT.
IF( VRCONDV*RCONDE ) THEN
925.GT.
IF( VRCDVIN*RCDEIN ) THEN
930 TOL = MAX( TOL, SMLNUM / EPS )
931 TOLIN = MAX( TOLIN, SMLNUM / EPS )
932.GT.
IF( EPS*( RCDVIN-TOLIN )RCONDV+TOL ) THEN
933 RESULT( 17 ) = ULPINV
934.GT.
ELSE IF( RCDVIN-TOLINRCONDV+TOL ) THEN
935 RESULT( 17 ) = ( RCDVIN-TOLIN ) / ( RCONDV+TOL )
936.LT.
ELSE IF( RCDVIN+TOLINEPS*( RCONDV-TOL ) ) THEN
937 RESULT( 17 ) = ULPINV
938.LT.
ELSE IF( RCDVIN+TOLINRCONDV-TOL ) THEN
939 RESULT( 17 ) = ( RCONDV-TOL ) / ( RCDVIN+TOLIN )
948 9999 FORMAT( ' cget24:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
949 $ I6, ', input example number =
', I4 )
950 9998 FORMAT( ' cget24:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
951 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
subroutine cgeesx(jobvs, sort, select, sense, n, a, lda, sdim, w, vs, ldvs, rconde, rcondv, work, lwork, rwork, bwork, info)
CGEESX computes the eigenvalues, the Schur form, and, optionally, the matrix of Schur vectors for GE ...
subroutine cget24(comp, jtype, thresh, iseed, nounit, n, a, lda, h, ht, w, wt, wtmp, vs, ldvs, vs1, rcdein, rcdvin, nslct, islct, isrt, result, work, lwork, rwork, bwork, info)
CGET24