LAPACK  3.10.0
LAPACK: Linear Algebra PACKage

◆ cdrgvx()

subroutine cdrgvx ( integer  NSIZE,
real  THRESH,
integer  NIN,
integer  NOUT,
complex, dimension( lda, * )  A,
integer  LDA,
complex, dimension( lda, * )  B,
complex, dimension( lda, * )  AI,
complex, dimension( lda, * )  BI,
complex, dimension( * )  ALPHA,
complex, dimension( * )  BETA,
complex, dimension( lda, * )  VL,
complex, dimension( lda, * )  VR,
integer  ILO,
integer  IHI,
real, dimension( * )  LSCALE,
real, dimension( * )  RSCALE,
real, dimension( * )  S,
real, dimension( * )  STRU,
real, dimension( * )  DIF,
real, dimension( * )  DIFTRU,
complex, dimension( * )  WORK,
integer  LWORK,
real, dimension( * )  RWORK,
integer, dimension( * )  IWORK,
integer  LIWORK,
real, dimension( 4 )  RESULT,
logical, dimension( * )  BWORK,
integer  INFO 
)

CDRGVX

Purpose:
 CDRGVX checks the nonsymmetric generalized eigenvalue problem
 expert driver CGGEVX.

 CGGEVX computes the generalized eigenvalues, (optionally) the left
 and/or right eigenvectors, (optionally) computes a balancing
 transformation to improve the conditioning, and (optionally)
 reciprocal condition numbers for the eigenvalues and eigenvectors.

 When CDRGVX is called with NSIZE > 0, two types of test matrix pairs
 are generated by the subroutine SLATM6 and test the driver CGGEVX.
 The test matrices have the known exact condition numbers for
 eigenvalues. For the condition numbers of the eigenvectors
 corresponding the first and last eigenvalues are also know
 ``exactly'' (see CLATM6).
 For each matrix pair, the following tests will be performed and
 compared with the threshold THRESH.

 (1) max over all left eigenvalue/-vector pairs (beta/alpha,l) of

    | l**H * (beta A - alpha B) | / ( ulp max( |beta A|, |alpha B| ) )

     where l**H is the conjugate tranpose of l.

 (2) max over all right eigenvalue/-vector pairs (beta/alpha,r) of

       | (beta A - alpha B) r | / ( ulp max( |beta A|, |alpha B| ) )

 (3) The condition number S(i) of eigenvalues computed by CGGEVX
     differs less than a factor THRESH from the exact S(i) (see
     CLATM6).

 (4) DIF(i) computed by CTGSNA differs less than a factor 10*THRESH
     from the exact value (for the 1st and 5th vectors only).

 Test Matrices
 =============

 Two kinds of test matrix pairs
          (A, B) = inverse(YH) * (Da, Db) * inverse(X)
 are used in the tests:

 1: Da = 1+a   0    0    0    0    Db = 1   0   0   0   0
          0   2+a   0    0    0         0   1   0   0   0
          0    0   3+a   0    0         0   0   1   0   0
          0    0    0   4+a   0         0   0   0   1   0
          0    0    0    0   5+a ,      0   0   0   0   1 , and

 2: Da =  1   -1    0    0    0    Db = 1   0   0   0   0
          1    1    0    0    0         0   1   0   0   0
          0    0    1    0    0         0   0   1   0   0
          0    0    0   1+a  1+b        0   0   0   1   0
          0    0    0  -1-b  1+a ,      0   0   0   0   1 .

 In both cases the same inverse(YH) and inverse(X) are used to compute
 (A, B), giving the exact eigenvectors to (A,B) as (YH, X):

 YH:  =  1    0   -y    y   -y    X =  1   0  -x  -x   x
         0    1   -y    y   -y         0   1   x  -x  -x
         0    0    1    0    0         0   0   1   0   0
         0    0    0    1    0         0   0   0   1   0
         0    0    0    0    1,        0   0   0   0   1 , where

 a, b, x and y will have all values independently of each other from
 { sqrt(sqrt(ULP)),  0.1,  1,  10,  1/sqrt(sqrt(ULP)) }.
Parameters
[in]NSIZE
          NSIZE is INTEGER
          The number of sizes of matrices to use.  NSIZE must be at
          least zero. If it is zero, no randomly generated matrices
          are tested, but any test matrices read from NIN will be
          tested.  If it is not zero, then N = 5.
[in]THRESH
          THRESH is REAL
          A test will count as "failed" if the "error", computed as
          described above, exceeds THRESH.  Note that the error
          is scaled to be O(1), so THRESH should be a reasonably
          small multiple of 1, e.g., 10 or 100.  In particular,
          it should not depend on the precision (single vs. double)
          or the size of the matrix.  It must be at least zero.
[in]NIN
          NIN is INTEGER
          The FORTRAN unit number for reading in the data file of
          problems to solve.
[in]NOUT
          NOUT is INTEGER
          The FORTRAN unit number for printing out error messages
          (e.g., if a routine returns IINFO not equal to 0.)
[out]A
          A is COMPLEX array, dimension (LDA, NSIZE)
          Used to hold the matrix whose eigenvalues are to be
          computed.  On exit, A contains the last matrix actually used.
[in]LDA
          LDA is INTEGER
          The leading dimension of A, B, AI, BI, Ao, and Bo.
          It must be at least 1 and at least NSIZE.
[out]B
          B is COMPLEX array, dimension (LDA, NSIZE)
          Used to hold the matrix whose eigenvalues are to be
          computed.  On exit, B contains the last matrix actually used.
[out]AI
          AI is COMPLEX array, dimension (LDA, NSIZE)
          Copy of A, modified by CGGEVX.
[out]BI
          BI is COMPLEX array, dimension (LDA, NSIZE)
          Copy of B, modified by CGGEVX.
[out]ALPHA
          ALPHA is COMPLEX array, dimension (NSIZE)
[out]BETA
          BETA is COMPLEX array, dimension (NSIZE)

          On exit, ALPHA/BETA are the eigenvalues.
[out]VL
          VL is COMPLEX array, dimension (LDA, NSIZE)
          VL holds the left eigenvectors computed by CGGEVX.
[out]VR
          VR is COMPLEX array, dimension (LDA, NSIZE)
          VR holds the right eigenvectors computed by CGGEVX.
[out]ILO
                ILO is INTEGER
[out]IHI
                IHI is INTEGER
[out]LSCALE
                LSCALE is REAL array, dimension (N)
[out]RSCALE
                RSCALE is REAL array, dimension (N)
[out]S
                S is REAL array, dimension (N)
[out]STRU
                STRU is REAL array, dimension (N)
[out]DIF
                DIF is REAL array, dimension (N)
[out]DIFTRU
                DIFTRU is REAL array, dimension (N)
[out]WORK
          WORK is COMPLEX array, dimension (LWORK)
[in]LWORK
          LWORK is INTEGER
          Leading dimension of WORK.  LWORK >= 2*N*N + 2*N
[out]RWORK
          RWORK is REAL array, dimension (6*N)
[out]IWORK
          IWORK is INTEGER array, dimension (LIWORK)
[in]LIWORK
          LIWORK is INTEGER
          Leading dimension of IWORK.  LIWORK >= N+2.
[out]RESULT
                RESULT is REAL array, dimension (4)
[out]BWORK
          BWORK is LOGICAL array, dimension (N)
[out]INFO
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -i, the i-th argument had an illegal value.
          > 0:  A routine returned an error code.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 294 of file cdrgvx.f.

298 *
299 * -- LAPACK test routine --
300 * -- LAPACK is a software package provided by Univ. of Tennessee, --
301 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
302 *
303 * .. Scalar Arguments ..
304  INTEGER IHI, ILO, INFO, LDA, LIWORK, LWORK, NIN, NOUT,
305  $ NSIZE
306  REAL THRESH
307 * ..
308 * .. Array Arguments ..
309  LOGICAL BWORK( * )
310  INTEGER IWORK( * )
311  REAL DIF( * ), DIFTRU( * ), LSCALE( * ),
312  $ RESULT( 4 ), RSCALE( * ), RWORK( * ), S( * ),
313  $ STRU( * )
314  COMPLEX A( LDA, * ), AI( LDA, * ), ALPHA( * ),
315  $ B( LDA, * ), BETA( * ), BI( LDA, * ),
316  $ VL( LDA, * ), VR( LDA, * ), WORK( * )
317 * ..
318 *
319 * =====================================================================
320 *
321 * .. Parameters ..
322  REAL ZERO, ONE, TEN, TNTH, HALF
323  parameter( zero = 0.0e+0, one = 1.0e+0, ten = 1.0e+1,
324  $ tnth = 1.0e-1, half = 0.5e+0 )
325 * ..
326 * .. Local Scalars ..
327  INTEGER I, IPTYPE, IWA, IWB, IWX, IWY, J, LINFO,
328  $ MAXWRK, MINWRK, N, NERRS, NMAX, NPTKNT, NTESTT
329  REAL ABNORM, ANORM, BNORM, RATIO1, RATIO2, THRSH2,
330  $ ULP, ULPINV
331 * ..
332 * .. Local Arrays ..
333  COMPLEX WEIGHT( 5 )
334 * ..
335 * .. External Functions ..
336  INTEGER ILAENV
337  REAL CLANGE, SLAMCH
338  EXTERNAL ilaenv, clange, slamch
339 * ..
340 * .. External Subroutines ..
341  EXTERNAL alasvm, cget52, cggevx, clacpy, clatm6, xerbla
342 * ..
343 * .. Intrinsic Functions ..
344  INTRINSIC abs, cmplx, max, sqrt
345 * ..
346 * .. Executable Statements ..
347 *
348 * Check for errors
349 *
350  info = 0
351 *
352  nmax = 5
353 *
354  IF( nsize.LT.0 ) THEN
355  info = -1
356  ELSE IF( thresh.LT.zero ) THEN
357  info = -2
358  ELSE IF( nin.LE.0 ) THEN
359  info = -3
360  ELSE IF( nout.LE.0 ) THEN
361  info = -4
362  ELSE IF( lda.LT.1 .OR. lda.LT.nmax ) THEN
363  info = -6
364  ELSE IF( liwork.LT.nmax+2 ) THEN
365  info = -26
366  END IF
367 *
368 * Compute workspace
369 * (Note: Comments in the code beginning "Workspace:" describe the
370 * minimal amount of workspace needed at that point in the code,
371 * as well as the preferred amount for good performance.
372 * NB refers to the optimal block size for the immediately
373 * following subroutine, as returned by ILAENV.)
374 *
375  minwrk = 1
376  IF( info.EQ.0 .AND. lwork.GE.1 ) THEN
377  minwrk = 2*nmax*( nmax+1 )
378  maxwrk = nmax*( 1+ilaenv( 1, 'CGEQRF', ' ', nmax, 1, nmax,
379  $ 0 ) )
380  maxwrk = max( maxwrk, 2*nmax*( nmax+1 ) )
381  work( 1 ) = maxwrk
382  END IF
383 *
384  IF( lwork.LT.minwrk )
385  $ info = -23
386 *
387  IF( info.NE.0 ) THEN
388  CALL xerbla( 'CDRGVX', -info )
389  RETURN
390  END IF
391 *
392  n = 5
393  ulp = slamch( 'P' )
394  ulpinv = one / ulp
395  thrsh2 = ten*thresh
396  nerrs = 0
397  nptknt = 0
398  ntestt = 0
399 *
400  IF( nsize.EQ.0 )
401  $ GO TO 90
402 *
403 * Parameters used for generating test matrices.
404 *
405  weight( 1 ) = cmplx( tnth, zero )
406  weight( 2 ) = cmplx( half, zero )
407  weight( 3 ) = one
408  weight( 4 ) = one / weight( 2 )
409  weight( 5 ) = one / weight( 1 )
410 *
411  DO 80 iptype = 1, 2
412  DO 70 iwa = 1, 5
413  DO 60 iwb = 1, 5
414  DO 50 iwx = 1, 5
415  DO 40 iwy = 1, 5
416 *
417 * generated a pair of test matrix
418 *
419  CALL clatm6( iptype, 5, a, lda, b, vr, lda, vl,
420  $ lda, weight( iwa ), weight( iwb ),
421  $ weight( iwx ), weight( iwy ), stru,
422  $ diftru )
423 *
424 * Compute eigenvalues/eigenvectors of (A, B).
425 * Compute eigenvalue/eigenvector condition numbers
426 * using computed eigenvectors.
427 *
428  CALL clacpy( 'F', n, n, a, lda, ai, lda )
429  CALL clacpy( 'F', n, n, b, lda, bi, lda )
430 *
431  CALL cggevx( 'N', 'V', 'V', 'B', n, ai, lda, bi,
432  $ lda, alpha, beta, vl, lda, vr, lda,
433  $ ilo, ihi, lscale, rscale, anorm,
434  $ bnorm, s, dif, work, lwork, rwork,
435  $ iwork, bwork, linfo )
436  IF( linfo.NE.0 ) THEN
437  WRITE( nout, fmt = 9999 )'CGGEVX', linfo, n,
438  $ iptype, iwa, iwb, iwx, iwy
439  GO TO 30
440  END IF
441 *
442 * Compute the norm(A, B)
443 *
444  CALL clacpy( 'Full', n, n, ai, lda, work, n )
445  CALL clacpy( 'Full', n, n, bi, lda, work( n*n+1 ),
446  $ n )
447  abnorm = clange( 'Fro', n, 2*n, work, n, rwork )
448 *
449 * Tests (1) and (2)
450 *
451  result( 1 ) = zero
452  CALL cget52( .true., n, a, lda, b, lda, vl, lda,
453  $ alpha, beta, work, rwork,
454  $ result( 1 ) )
455  IF( result( 2 ).GT.thresh ) THEN
456  WRITE( nout, fmt = 9998 )'Left', 'CGGEVX',
457  $ result( 2 ), n, iptype, iwa, iwb, iwx, iwy
458  END IF
459 *
460  result( 2 ) = zero
461  CALL cget52( .false., n, a, lda, b, lda, vr, lda,
462  $ alpha, beta, work, rwork,
463  $ result( 2 ) )
464  IF( result( 3 ).GT.thresh ) THEN
465  WRITE( nout, fmt = 9998 )'Right', 'CGGEVX',
466  $ result( 3 ), n, iptype, iwa, iwb, iwx, iwy
467  END IF
468 *
469 * Test (3)
470 *
471  result( 3 ) = zero
472  DO 10 i = 1, n
473  IF( s( i ).EQ.zero ) THEN
474  IF( stru( i ).GT.abnorm*ulp )
475  $ result( 3 ) = ulpinv
476  ELSE IF( stru( i ).EQ.zero ) THEN
477  IF( s( i ).GT.abnorm*ulp )
478  $ result( 3 ) = ulpinv
479  ELSE
480  rwork( i ) = max( abs( stru( i ) / s( i ) ),
481  $ abs( s( i ) / stru( i ) ) )
482  result( 3 ) = max( result( 3 ), rwork( i ) )
483  END IF
484  10 CONTINUE
485 *
486 * Test (4)
487 *
488  result( 4 ) = zero
489  IF( dif( 1 ).EQ.zero ) THEN
490  IF( diftru( 1 ).GT.abnorm*ulp )
491  $ result( 4 ) = ulpinv
492  ELSE IF( diftru( 1 ).EQ.zero ) THEN
493  IF( dif( 1 ).GT.abnorm*ulp )
494  $ result( 4 ) = ulpinv
495  ELSE IF( dif( 5 ).EQ.zero ) THEN
496  IF( diftru( 5 ).GT.abnorm*ulp )
497  $ result( 4 ) = ulpinv
498  ELSE IF( diftru( 5 ).EQ.zero ) THEN
499  IF( dif( 5 ).GT.abnorm*ulp )
500  $ result( 4 ) = ulpinv
501  ELSE
502  ratio1 = max( abs( diftru( 1 ) / dif( 1 ) ),
503  $ abs( dif( 1 ) / diftru( 1 ) ) )
504  ratio2 = max( abs( diftru( 5 ) / dif( 5 ) ),
505  $ abs( dif( 5 ) / diftru( 5 ) ) )
506  result( 4 ) = max( ratio1, ratio2 )
507  END IF
508 *
509  ntestt = ntestt + 4
510 *
511 * Print out tests which fail.
512 *
513  DO 20 j = 1, 4
514  IF( ( result( j ).GE.thrsh2 .AND. j.GE.4 ) .OR.
515  $ ( result( j ).GE.thresh .AND. j.LE.3 ) )
516  $ THEN
517 *
518 * If this is the first test to fail,
519 * print a header to the data file.
520 *
521  IF( nerrs.EQ.0 ) THEN
522  WRITE( nout, fmt = 9997 )'CXV'
523 *
524 * Print out messages for built-in examples
525 *
526 * Matrix types
527 *
528  WRITE( nout, fmt = 9995 )
529  WRITE( nout, fmt = 9994 )
530  WRITE( nout, fmt = 9993 )
531 *
532 * Tests performed
533 *
534  WRITE( nout, fmt = 9992 )'''',
535  $ 'transpose', ''''
536 *
537  END IF
538  nerrs = nerrs + 1
539  IF( result( j ).LT.10000.0 ) THEN
540  WRITE( nout, fmt = 9991 )iptype, iwa,
541  $ iwb, iwx, iwy, j, result( j )
542  ELSE
543  WRITE( nout, fmt = 9990 )iptype, iwa,
544  $ iwb, iwx, iwy, j, result( j )
545  END IF
546  END IF
547  20 CONTINUE
548 *
549  30 CONTINUE
550 *
551  40 CONTINUE
552  50 CONTINUE
553  60 CONTINUE
554  70 CONTINUE
555  80 CONTINUE
556 *
557  GO TO 150
558 *
559  90 CONTINUE
560 *
561 * Read in data from file to check accuracy of condition estimation
562 * Read input data until N=0
563 *
564  READ( nin, fmt = *, END = 150 )n
565  IF( n.EQ.0 )
566  $ GO TO 150
567  DO 100 i = 1, n
568  READ( nin, fmt = * )( a( i, j ), j = 1, n )
569  100 CONTINUE
570  DO 110 i = 1, n
571  READ( nin, fmt = * )( b( i, j ), j = 1, n )
572  110 CONTINUE
573  READ( nin, fmt = * )( stru( i ), i = 1, n )
574  READ( nin, fmt = * )( diftru( i ), i = 1, n )
575 *
576  nptknt = nptknt + 1
577 *
578 * Compute eigenvalues/eigenvectors of (A, B).
579 * Compute eigenvalue/eigenvector condition numbers
580 * using computed eigenvectors.
581 *
582  CALL clacpy( 'F', n, n, a, lda, ai, lda )
583  CALL clacpy( 'F', n, n, b, lda, bi, lda )
584 *
585  CALL cggevx( 'N', 'V', 'V', 'B', n, ai, lda, bi, lda, alpha, beta,
586  $ vl, lda, vr, lda, ilo, ihi, lscale, rscale, anorm,
587  $ bnorm, s, dif, work, lwork, rwork, iwork, bwork,
588  $ linfo )
589 *
590  IF( linfo.NE.0 ) THEN
591  WRITE( nout, fmt = 9987 )'CGGEVX', linfo, n, nptknt
592  GO TO 140
593  END IF
594 *
595 * Compute the norm(A, B)
596 *
597  CALL clacpy( 'Full', n, n, ai, lda, work, n )
598  CALL clacpy( 'Full', n, n, bi, lda, work( n*n+1 ), n )
599  abnorm = clange( 'Fro', n, 2*n, work, n, rwork )
600 *
601 * Tests (1) and (2)
602 *
603  result( 1 ) = zero
604  CALL cget52( .true., n, a, lda, b, lda, vl, lda, alpha, beta,
605  $ work, rwork, result( 1 ) )
606  IF( result( 2 ).GT.thresh ) THEN
607  WRITE( nout, fmt = 9986 )'Left', 'CGGEVX', result( 2 ), n,
608  $ nptknt
609  END IF
610 *
611  result( 2 ) = zero
612  CALL cget52( .false., n, a, lda, b, lda, vr, lda, alpha, beta,
613  $ work, rwork, result( 2 ) )
614  IF( result( 3 ).GT.thresh ) THEN
615  WRITE( nout, fmt = 9986 )'Right', 'CGGEVX', result( 3 ), n,
616  $ nptknt
617  END IF
618 *
619 * Test (3)
620 *
621  result( 3 ) = zero
622  DO 120 i = 1, n
623  IF( s( i ).EQ.zero ) THEN
624  IF( stru( i ).GT.abnorm*ulp )
625  $ result( 3 ) = ulpinv
626  ELSE IF( stru( i ).EQ.zero ) THEN
627  IF( s( i ).GT.abnorm*ulp )
628  $ result( 3 ) = ulpinv
629  ELSE
630  rwork( i ) = max( abs( stru( i ) / s( i ) ),
631  $ abs( s( i ) / stru( i ) ) )
632  result( 3 ) = max( result( 3 ), rwork( i ) )
633  END IF
634  120 CONTINUE
635 *
636 * Test (4)
637 *
638  result( 4 ) = zero
639  IF( dif( 1 ).EQ.zero ) THEN
640  IF( diftru( 1 ).GT.abnorm*ulp )
641  $ result( 4 ) = ulpinv
642  ELSE IF( diftru( 1 ).EQ.zero ) THEN
643  IF( dif( 1 ).GT.abnorm*ulp )
644  $ result( 4 ) = ulpinv
645  ELSE IF( dif( 5 ).EQ.zero ) THEN
646  IF( diftru( 5 ).GT.abnorm*ulp )
647  $ result( 4 ) = ulpinv
648  ELSE IF( diftru( 5 ).EQ.zero ) THEN
649  IF( dif( 5 ).GT.abnorm*ulp )
650  $ result( 4 ) = ulpinv
651  ELSE
652  ratio1 = max( abs( diftru( 1 ) / dif( 1 ) ),
653  $ abs( dif( 1 ) / diftru( 1 ) ) )
654  ratio2 = max( abs( diftru( 5 ) / dif( 5 ) ),
655  $ abs( dif( 5 ) / diftru( 5 ) ) )
656  result( 4 ) = max( ratio1, ratio2 )
657  END IF
658 *
659  ntestt = ntestt + 4
660 *
661 * Print out tests which fail.
662 *
663  DO 130 j = 1, 4
664  IF( result( j ).GE.thrsh2 ) THEN
665 *
666 * If this is the first test to fail,
667 * print a header to the data file.
668 *
669  IF( nerrs.EQ.0 ) THEN
670  WRITE( nout, fmt = 9997 )'CXV'
671 *
672 * Print out messages for built-in examples
673 *
674 * Matrix types
675 *
676  WRITE( nout, fmt = 9996 )
677 *
678 * Tests performed
679 *
680  WRITE( nout, fmt = 9992 )'''', 'transpose', ''''
681 *
682  END IF
683  nerrs = nerrs + 1
684  IF( result( j ).LT.10000.0 ) THEN
685  WRITE( nout, fmt = 9989 )nptknt, n, j, result( j )
686  ELSE
687  WRITE( nout, fmt = 9988 )nptknt, n, j, result( j )
688  END IF
689  END IF
690  130 CONTINUE
691 *
692  140 CONTINUE
693 *
694  GO TO 90
695  150 CONTINUE
696 *
697 * Summary
698 *
699  CALL alasvm( 'CXV', nout, nerrs, ntestt, 0 )
700 *
701  work( 1 ) = maxwrk
702 *
703  RETURN
704 *
705  9999 FORMAT( ' CDRGVX: ', a, ' returned INFO=', i6, '.', / 9x, 'N=',
706  $ i6, ', JTYPE=', i6, ')' )
707 *
708  9998 FORMAT( ' CDRGVX: ', a, ' Eigenvectors from ', a, ' incorrectly ',
709  $ 'normalized.', / ' Bits of error=', 0p, g10.3, ',', 9x,
710  $ 'N=', i6, ', JTYPE=', i6, ', IWA=', i5, ', IWB=', i5,
711  $ ', IWX=', i5, ', IWY=', i5 )
712 *
713  9997 FORMAT( / 1x, a3, ' -- Complex Expert Eigenvalue/vector',
714  $ ' problem driver' )
715 *
716  9996 FORMAT( 'Input Example' )
717 *
718  9995 FORMAT( ' Matrix types: ', / )
719 *
720  9994 FORMAT( ' TYPE 1: Da is diagonal, Db is identity, ',
721  $ / ' A = Y^(-H) Da X^(-1), B = Y^(-H) Db X^(-1) ',
722  $ / ' YH and X are left and right eigenvectors. ', / )
723 *
724  9993 FORMAT( ' TYPE 2: Da is quasi-diagonal, Db is identity, ',
725  $ / ' A = Y^(-H) Da X^(-1), B = Y^(-H) Db X^(-1) ',
726  $ / ' YH and X are left and right eigenvectors. ', / )
727 *
728  9992 FORMAT( / ' Tests performed: ', / 4x,
729  $ ' a is alpha, b is beta, l is a left eigenvector, ', / 4x,
730  $ ' r is a right eigenvector and ', a, ' means ', a, '.',
731  $ / ' 1 = max | ( b A - a B )', a, ' l | / const.',
732  $ / ' 2 = max | ( b A - a B ) r | / const.',
733  $ / ' 3 = max ( Sest/Stru, Stru/Sest ) ',
734  $ ' over all eigenvalues', /
735  $ ' 4 = max( DIFest/DIFtru, DIFtru/DIFest ) ',
736  $ ' over the 1st and 5th eigenvectors', / )
737 *
738  9991 FORMAT( ' Type=', i2, ',', ' IWA=', i2, ', IWB=', i2, ', IWX=',
739  $ i2, ', IWY=', i2, ', result ', i2, ' is', 0p, f8.2 )
740 *
741  9990 FORMAT( ' Type=', i2, ',', ' IWA=', i2, ', IWB=', i2, ', IWX=',
742  $ i2, ', IWY=', i2, ', result ', i2, ' is', 1p, e10.3 )
743 *
744  9989 FORMAT( ' Input example #', i2, ', matrix order=', i4, ',',
745  $ ' result ', i2, ' is', 0p, f8.2 )
746 *
747  9988 FORMAT( ' Input example #', i2, ', matrix order=', i4, ',',
748  $ ' result ', i2, ' is', 1p, e10.3 )
749 *
750  9987 FORMAT( ' CDRGVX: ', a, ' returned INFO=', i6, '.', / 9x, 'N=',
751  $ i6, ', Input example #', i2, ')' )
752 *
753  9986 FORMAT( ' CDRGVX: ', a, ' Eigenvectors from ', a, ' incorrectly ',
754  $ 'normalized.', / ' Bits of error=', 0p, g10.3, ',', 9x,
755  $ 'N=', i6, ', Input Example #', i2, ')' )
756 *
757 * End of CDRGVX
758 *
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: ilaenv.f:162
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:60
subroutine alasvm(TYPE, NOUT, NFAIL, NRUN, NERRS)
ALASVM
Definition: alasvm.f:73
subroutine cget52(LEFT, N, A, LDA, B, LDB, E, LDE, ALPHA, BETA, WORK, RWORK, RESULT)
CGET52
Definition: cget52.f:161
subroutine clatm6(TYPE, N, A, LDA, B, X, LDX, Y, LDY, ALPHA, BETA, WX, WY, S, DIF)
CLATM6
Definition: clatm6.f:174
real function clange(NORM, M, N, A, LDA, WORK)
CLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
Definition: clange.f:115
subroutine cggevx(BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, B, LDB, ALPHA, BETA, VL, LDVL, VR, LDVR, ILO, IHI, LSCALE, RSCALE, ABNRM, BBNRM, RCONDE, RCONDV, WORK, LWORK, RWORK, IWORK, BWORK, INFO)
CGGEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices
Definition: cggevx.f:374
subroutine clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
Definition: clacpy.f:103
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:68
Here is the call graph for this function:
Here is the caller graph for this function: