1*> \brief \b DGET37
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*  Definition:
9*  ===========
10*
11*       SUBROUTINE DGET37( RMAX, LMAX, NINFO, KNT, NIN )
12*
13*       .. Scalar Arguments ..
14*       INTEGER            KNT, NIN
15*       ..
16*       .. Array Arguments ..
17*       INTEGER            LMAX( 3 ), NINFO( 3 )
18*       DOUBLE PRECISION   RMAX( 3 )
19*       ..
20*
21*
22*> \par Purpose:
23*  =============
24*>
25*> \verbatim
26*>
27*> DGET37 tests DTRSNA, a routine for estimating condition numbers of
28*> eigenvalues and/or right eigenvectors of a matrix.
29*>
30*> The test matrices are read from a file with logical unit number NIN.
31*> \endverbatim
32*
33*  Arguments:
34*  ==========
35*
36*> \param[out] RMAX
37*> \verbatim
38*>          RMAX is DOUBLE PRECISION array, dimension (3)
39*>          Value of the largest test ratio.
40*>          RMAX(1) = largest ratio comparing different calls to DTRSNA
41*>          RMAX(2) = largest error in reciprocal condition
42*>                    numbers taking their conditioning into account
43*>          RMAX(3) = largest error in reciprocal condition
44*>                    numbers not taking their conditioning into
45*>                    account (may be larger than RMAX(2))
46*> \endverbatim
47*>
48*> \param[out] LMAX
49*> \verbatim
50*>          LMAX is INTEGER array, dimension (3)
51*>          LMAX(i) is example number where largest test ratio
52*>          RMAX(i) is achieved. Also:
53*>          If DGEHRD returns INFO nonzero on example i, LMAX(1)=i
54*>          If DHSEQR returns INFO nonzero on example i, LMAX(2)=i
55*>          If DTRSNA returns INFO nonzero on example i, LMAX(3)=i
56*> \endverbatim
57*>
58*> \param[out] NINFO
59*> \verbatim
60*>          NINFO is INTEGER array, dimension (3)
61*>          NINFO(1) = No. of times DGEHRD returned INFO nonzero
62*>          NINFO(2) = No. of times DHSEQR returned INFO nonzero
63*>          NINFO(3) = No. of times DTRSNA returned INFO nonzero
64*> \endverbatim
65*>
66*> \param[out] KNT
67*> \verbatim
68*>          KNT is INTEGER
69*>          Total number of examples tested.
70*> \endverbatim
71*>
72*> \param[in] NIN
73*> \verbatim
74*>          NIN is INTEGER
75*>          Input logical unit number
76*> \endverbatim
77*
78*  Authors:
79*  ========
80*
81*> \author Univ. of Tennessee
82*> \author Univ. of California Berkeley
83*> \author Univ. of Colorado Denver
84*> \author NAG Ltd.
85*
86*> \ingroup double_eig
87*
88*  =====================================================================
89      SUBROUTINE DGET37( RMAX, LMAX, NINFO, KNT, NIN )
90*
91*  -- LAPACK test routine --
92*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
93*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
94*
95*     .. Scalar Arguments ..
96      INTEGER            KNT, NIN
97*     ..
98*     .. Array Arguments ..
99      INTEGER            LMAX( 3 ), NINFO( 3 )
100      DOUBLE PRECISION   RMAX( 3 )
101*     ..
102*
103*  =====================================================================
104*
105*     .. Parameters ..
106      DOUBLE PRECISION   ZERO, ONE, TWO
107      PARAMETER          ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0 )
108      DOUBLE PRECISION   EPSIN
109      PARAMETER          ( EPSIN = 5.9605D-8 )
110      INTEGER            LDT, LWORK
111      PARAMETER          ( LDT = 20, LWORK = 2*LDT*( 10+LDT ) )
112*     ..
113*     .. Local Scalars ..
114      INTEGER            I, ICMP, IFND, INFO, ISCL, J, KMIN, M, N
115      DOUBLE PRECISION   BIGNUM, EPS, SMLNUM, TNRM, TOL, TOLIN, V,
116     $                   VIMIN, VMAX, VMUL, VRMIN
117*     ..
118*     .. Local Arrays ..
119      LOGICAL            SELECT( LDT )
120      INTEGER            IWORK( 2*LDT ), LCMP( 3 )
121      DOUBLE PRECISION   DUM( 1 ), LE( LDT, LDT ), RE( LDT, LDT ),
122     $                   S( LDT ), SEP( LDT ), SEPIN( LDT ),
123     $                   SEPTMP( LDT ), SIN( LDT ), STMP( LDT ),
124     $                   T( LDT, LDT ), TMP( LDT, LDT ), VAL( 3 ),
125     $                   WI( LDT ), WIIN( LDT ), WITMP( LDT ),
126     $                   WORK( LWORK ), WR( LDT ), WRIN( LDT ),
127     $                   WRTMP( LDT )
128*     ..
129*     .. External Functions ..
130      DOUBLE PRECISION   DLAMCH, DLANGE
131      EXTERNAL           DLAMCH, DLANGE
132*     ..
133*     .. External Subroutines ..
134      EXTERNAL           DCOPY, DGEHRD, DHSEQR, DLABAD, DLACPY, DSCAL,
135     $                   DTREVC, DTRSNA
136*     ..
137*     .. Intrinsic Functions ..
138      INTRINSIC          DBLE, MAX, SQRT
139*     ..
140*     .. Executable Statements ..
141*
142      EPS = DLAMCH( 'P' )
143      SMLNUM = DLAMCH( 'S' ) / EPS
144      BIGNUM = ONE / SMLNUM
145      CALL DLABAD( SMLNUM, BIGNUM )
146*
147*     EPSIN = 2**(-24) = precision to which input data computed
148*
149      EPS = MAX( EPS, EPSIN )
150      RMAX( 1 ) = ZERO
151      RMAX( 2 ) = ZERO
152      RMAX( 3 ) = ZERO
153      LMAX( 1 ) = 0
154      LMAX( 2 ) = 0
155      LMAX( 3 ) = 0
156      KNT = 0
157      NINFO( 1 ) = 0
158      NINFO( 2 ) = 0
159      NINFO( 3 ) = 0
160*
161      VAL( 1 ) = SQRT( SMLNUM )
162      VAL( 2 ) = ONE
163      VAL( 3 ) = SQRT( BIGNUM )
164*
165*     Read input data until N=0.  Assume input eigenvalues are sorted
166*     lexicographically (increasing by real part, then decreasing by
167*     imaginary part)
168*
169   10 CONTINUE
170      READ( NIN, FMT = * )N
171      IF( N.EQ.0 )
172     $   RETURN
173      DO 20 I = 1, N
174         READ( NIN, FMT = * )( TMP( I, J ), J = 1, N )
175   20 CONTINUE
176      DO 30 I = 1, N
177         READ( NIN, FMT = * )WRIN( I ), WIIN( I ), SIN( I ), SEPIN( I )
178   30 CONTINUE
179      TNRM = DLANGE( 'M', N, N, TMP, LDT, WORK )
180*
181*     Begin test
182*
183      DO 240 ISCL = 1, 3
184*
185*        Scale input matrix
186*
187         KNT = KNT + 1
188         CALL DLACPY( 'F', N, N, TMP, LDT, T, LDT )
189         VMUL = VAL( ISCL )
190         DO 40 I = 1, N
191            CALL DSCAL( N, VMUL, T( 1, I ), 1 )
192   40    CONTINUE
193         IF( TNRM.EQ.ZERO )
194     $      VMUL = ONE
195*
196*        Compute eigenvalues and eigenvectors
197*
198         CALL DGEHRD( N, 1, N, T, LDT, WORK( 1 ), WORK( N+1 ), LWORK-N,
199     $                INFO )
200         IF( INFO.NE.0 ) THEN
201            LMAX( 1 ) = KNT
202            NINFO( 1 ) = NINFO( 1 ) + 1
203            GO TO 240
204         END IF
205         DO 60 J = 1, N - 2
206            DO 50 I = J + 2, N
207               T( I, J ) = ZERO
208   50       CONTINUE
209   60    CONTINUE
210*
211*        Compute Schur form
212*
213         CALL DHSEQR( 'S', 'N', N, 1, N, T, LDT, WR, WI, DUM, 1, WORK,
214     $                LWORK, INFO )
215         IF( INFO.NE.0 ) THEN
216            LMAX( 2 ) = KNT
217            NINFO( 2 ) = NINFO( 2 ) + 1
218            GO TO 240
219         END IF
220*
221*        Compute eigenvectors
222*
223         CALL DTREVC( 'Both', 'All', SELECT, N, T, LDT, LE, LDT, RE,
224     $                LDT, N, M, WORK, INFO )
225*
226*        Compute condition numbers
227*
228         CALL DTRSNA( 'Both', 'All', SELECT, N, T, LDT, LE, LDT, RE,
229     $                LDT, S, SEP, N, M, WORK, N, IWORK, INFO )
230         IF( INFO.NE.0 ) THEN
231            LMAX( 3 ) = KNT
232            NINFO( 3 ) = NINFO( 3 ) + 1
233            GO TO 240
234         END IF
235*
236*        Sort eigenvalues and condition numbers lexicographically
237*        to compare with inputs
238*
239         CALL DCOPY( N, WR, 1, WRTMP, 1 )
240         CALL DCOPY( N, WI, 1, WITMP, 1 )
241         CALL DCOPY( N, S, 1, STMP, 1 )
242         CALL DCOPY( N, SEP, 1, SEPTMP, 1 )
243         CALL DSCAL( N, ONE / VMUL, SEPTMP, 1 )
244         DO 80 I = 1, N - 1
245            KMIN = I
246            VRMIN = WRTMP( I )
247            VIMIN = WITMP( I )
248            DO 70 J = I + 1, N
249               IF( WRTMP( J ).LT.VRMIN ) THEN
250                  KMIN = J
251                  VRMIN = WRTMP( J )
252                  VIMIN = WITMP( J )
253               END IF
254   70       CONTINUE
255            WRTMP( KMIN ) = WRTMP( I )
256            WITMP( KMIN ) = WITMP( I )
257            WRTMP( I ) = VRMIN
258            WITMP( I ) = VIMIN
259            VRMIN = STMP( KMIN )
260            STMP( KMIN ) = STMP( I )
261            STMP( I ) = VRMIN
262            VRMIN = SEPTMP( KMIN )
263            SEPTMP( KMIN ) = SEPTMP( I )
264            SEPTMP( I ) = VRMIN
265   80    CONTINUE
266*
267*        Compare condition numbers for eigenvalues
268*        taking their condition numbers into account
269*
270         V = MAX( TWO*DBLE( N )*EPS*TNRM, SMLNUM )
271         IF( TNRM.EQ.ZERO )
272     $      V = ONE
273         DO 90 I = 1, N
274            IF( V.GT.SEPTMP( I ) ) THEN
275               TOL = ONE
276            ELSE
277               TOL = V / SEPTMP( I )
278            END IF
279            IF( V.GT.SEPIN( I ) ) THEN
280               TOLIN = ONE
281            ELSE
282               TOLIN = V / SEPIN( I )
283            END IF
284            TOL = MAX( TOL, SMLNUM / EPS )
285            TOLIN = MAX( TOLIN, SMLNUM / EPS )
286            IF( EPS*( SIN( I )-TOLIN ).GT.STMP( I )+TOL ) THEN
287               VMAX = ONE / EPS
288            ELSE IF( SIN( I )-TOLIN.GT.STMP( I )+TOL ) THEN
289               VMAX = ( SIN( I )-TOLIN ) / ( STMP( I )+TOL )
290            ELSE IF( SIN( I )+TOLIN.LT.EPS*( STMP( I )-TOL ) ) THEN
291               VMAX = ONE / EPS
292            ELSE IF( SIN( I )+TOLIN.LT.STMP( I )-TOL ) THEN
293               VMAX = ( STMP( I )-TOL ) / ( SIN( I )+TOLIN )
294            ELSE
295               VMAX = ONE
296            END IF
297            IF( VMAX.GT.RMAX( 2 ) ) THEN
298               RMAX( 2 ) = VMAX
299               IF( NINFO( 2 ).EQ.0 )
300     $            LMAX( 2 ) = KNT
301            END IF
302   90    CONTINUE
303*
304*        Compare condition numbers for eigenvectors
305*        taking their condition numbers into account
306*
307         DO 100 I = 1, N
308            IF( V.GT.SEPTMP( I )*STMP( I ) ) THEN
309               TOL = SEPTMP( I )
310            ELSE
311               TOL = V / STMP( I )
312            END IF
313            IF( V.GT.SEPIN( I )*SIN( I ) ) THEN
314               TOLIN = SEPIN( I )
315            ELSE
316               TOLIN = V / SIN( I )
317            END IF
318            TOL = MAX( TOL, SMLNUM / EPS )
319            TOLIN = MAX( TOLIN, SMLNUM / EPS )
320            IF( EPS*( SEPIN( I )-TOLIN ).GT.SEPTMP( I )+TOL ) THEN
321               VMAX = ONE / EPS
322            ELSE IF( SEPIN( I )-TOLIN.GT.SEPTMP( I )+TOL ) THEN
323               VMAX = ( SEPIN( I )-TOLIN ) / ( SEPTMP( I )+TOL )
324            ELSE IF( SEPIN( I )+TOLIN.LT.EPS*( SEPTMP( I )-TOL ) ) THEN
325               VMAX = ONE / EPS
326            ELSE IF( SEPIN( I )+TOLIN.LT.SEPTMP( I )-TOL ) THEN
327               VMAX = ( SEPTMP( I )-TOL ) / ( SEPIN( I )+TOLIN )
328            ELSE
329               VMAX = ONE
330            END IF
331            IF( VMAX.GT.RMAX( 2 ) ) THEN
332               RMAX( 2 ) = VMAX
333               IF( NINFO( 2 ).EQ.0 )
334     $            LMAX( 2 ) = KNT
335            END IF
336  100    CONTINUE
337*
338*        Compare condition numbers for eigenvalues
339*        without taking their condition numbers into account
340*
341         DO 110 I = 1, N
342            IF( SIN( I ).LE.DBLE( 2*N )*EPS .AND. STMP( I ).LE.
343     $          DBLE( 2*N )*EPS ) THEN
344               VMAX = ONE
345            ELSE IF( EPS*SIN( I ).GT.STMP( I ) ) THEN
346               VMAX = ONE / EPS
347            ELSE IF( SIN( I ).GT.STMP( I ) ) THEN
348               VMAX = SIN( I ) / STMP( I )
349            ELSE IF( SIN( I ).LT.EPS*STMP( I ) ) THEN
350               VMAX = ONE / EPS
351            ELSE IF( SIN( I ).LT.STMP( I ) ) THEN
352               VMAX = STMP( I ) / SIN( I )
353            ELSE
354               VMAX = ONE
355            END IF
356            IF( VMAX.GT.RMAX( 3 ) ) THEN
357               RMAX( 3 ) = VMAX
358               IF( NINFO( 3 ).EQ.0 )
359     $            LMAX( 3 ) = KNT
360            END IF
361  110    CONTINUE
362*
363*        Compare condition numbers for eigenvectors
364*        without taking their condition numbers into account
365*
366         DO 120 I = 1, N
367            IF( SEPIN( I ).LE.V .AND. SEPTMP( I ).LE.V ) THEN
368               VMAX = ONE
369            ELSE IF( EPS*SEPIN( I ).GT.SEPTMP( I ) ) THEN
370               VMAX = ONE / EPS
371            ELSE IF( SEPIN( I ).GT.SEPTMP( I ) ) THEN
372               VMAX = SEPIN( I ) / SEPTMP( I )
373            ELSE IF( SEPIN( I ).LT.EPS*SEPTMP( I ) ) THEN
374               VMAX = ONE / EPS
375            ELSE IF( SEPIN( I ).LT.SEPTMP( I ) ) THEN
376               VMAX = SEPTMP( I ) / SEPIN( I )
377            ELSE
378               VMAX = ONE
379            END IF
380            IF( VMAX.GT.RMAX( 3 ) ) THEN
381               RMAX( 3 ) = VMAX
382               IF( NINFO( 3 ).EQ.0 )
383     $            LMAX( 3 ) = KNT
384            END IF
385  120    CONTINUE
386*
387*        Compute eigenvalue condition numbers only and compare
388*
389         VMAX = ZERO
390         DUM( 1 ) = -ONE
391         CALL DCOPY( N, DUM, 0, STMP, 1 )
392         CALL DCOPY( N, DUM, 0, SEPTMP, 1 )
393         CALL DTRSNA( 'Eigcond', 'All', SELECT, N, T, LDT, LE, LDT, RE,
394     $                LDT, STMP, SEPTMP, N, M, WORK, N, IWORK, INFO )
395         IF( INFO.NE.0 ) THEN
396            LMAX( 3 ) = KNT
397            NINFO( 3 ) = NINFO( 3 ) + 1
398            GO TO 240
399         END IF
400         DO 130 I = 1, N
401            IF( STMP( I ).NE.S( I ) )
402     $         VMAX = ONE / EPS
403            IF( SEPTMP( I ).NE.DUM( 1 ) )
404     $         VMAX = ONE / EPS
405  130    CONTINUE
406*
407*        Compute eigenvector condition numbers only and compare
408*
409         CALL DCOPY( N, DUM, 0, STMP, 1 )
410         CALL DCOPY( N, DUM, 0, SEPTMP, 1 )
411         CALL DTRSNA( 'Veccond', 'All', SELECT, N, T, LDT, LE, LDT, RE,
412     $                LDT, STMP, SEPTMP, N, M, WORK, N, IWORK, INFO )
413         IF( INFO.NE.0 ) THEN
414            LMAX( 3 ) = KNT
415            NINFO( 3 ) = NINFO( 3 ) + 1
416            GO TO 240
417         END IF
418         DO 140 I = 1, N
419            IF( STMP( I ).NE.DUM( 1 ) )
420     $         VMAX = ONE / EPS
421            IF( SEPTMP( I ).NE.SEP( I ) )
422     $         VMAX = ONE / EPS
423  140    CONTINUE
424*
425*        Compute all condition numbers using SELECT and compare
426*
427         DO 150 I = 1, N
428            SELECT( I ) = .TRUE.
429  150    CONTINUE
430         CALL DCOPY( N, DUM, 0, STMP, 1 )
431         CALL DCOPY( N, DUM, 0, SEPTMP, 1 )
432         CALL DTRSNA( 'Bothcond', 'Some', SELECT, N, T, LDT, LE, LDT,
433     $                RE, LDT, STMP, SEPTMP, N, M, WORK, N, IWORK,
434     $                INFO )
435         IF( INFO.NE.0 ) THEN
436            LMAX( 3 ) = KNT
437            NINFO( 3 ) = NINFO( 3 ) + 1
438            GO TO 240
439         END IF
440         DO 160 I = 1, N
441            IF( SEPTMP( I ).NE.SEP( I ) )
442     $         VMAX = ONE / EPS
443            IF( STMP( I ).NE.S( I ) )
444     $         VMAX = ONE / EPS
445  160    CONTINUE
446*
447*        Compute eigenvalue condition numbers using SELECT and compare
448*
449         CALL DCOPY( N, DUM, 0, STMP, 1 )
450         CALL DCOPY( N, DUM, 0, SEPTMP, 1 )
451         CALL DTRSNA( 'Eigcond', 'Some', SELECT, N, T, LDT, LE, LDT, RE,
452     $                LDT, STMP, SEPTMP, N, M, WORK, N, IWORK, INFO )
453         IF( INFO.NE.0 ) THEN
454            LMAX( 3 ) = KNT
455            NINFO( 3 ) = NINFO( 3 ) + 1
456            GO TO 240
457         END IF
458         DO 170 I = 1, N
459            IF( STMP( I ).NE.S( I ) )
460     $         VMAX = ONE / EPS
461            IF( SEPTMP( I ).NE.DUM( 1 ) )
462     $         VMAX = ONE / EPS
463  170    CONTINUE
464*
465*        Compute eigenvector condition numbers using SELECT and compare
466*
467         CALL DCOPY( N, DUM, 0, STMP, 1 )
468         CALL DCOPY( N, DUM, 0, SEPTMP, 1 )
469         CALL DTRSNA( 'Veccond', 'Some', SELECT, N, T, LDT, LE, LDT, RE,
470     $                LDT, STMP, SEPTMP, N, M, WORK, N, IWORK, INFO )
471         IF( INFO.NE.0 ) THEN
472            LMAX( 3 ) = KNT
473            NINFO( 3 ) = NINFO( 3 ) + 1
474            GO TO 240
475         END IF
476         DO 180 I = 1, N
477            IF( STMP( I ).NE.DUM( 1 ) )
478     $         VMAX = ONE / EPS
479            IF( SEPTMP( I ).NE.SEP( I ) )
480     $         VMAX = ONE / EPS
481  180    CONTINUE
482         IF( VMAX.GT.RMAX( 1 ) ) THEN
483            RMAX( 1 ) = VMAX
484            IF( NINFO( 1 ).EQ.0 )
485     $         LMAX( 1 ) = KNT
486         END IF
487*
488*        Select first real and first complex eigenvalue
489*
490         IF( WI( 1 ).EQ.ZERO ) THEN
491            LCMP( 1 ) = 1
492            IFND = 0
493            DO 190 I = 2, N
494               IF( IFND.EQ.1 .OR. WI( I ).EQ.ZERO ) THEN
495                  SELECT( I ) = .FALSE.
496               ELSE
497                  IFND = 1
498                  LCMP( 2 ) = I
499                  LCMP( 3 ) = I + 1
500                  CALL DCOPY( N, RE( 1, I ), 1, RE( 1, 2 ), 1 )
501                  CALL DCOPY( N, RE( 1, I+1 ), 1, RE( 1, 3 ), 1 )
502                  CALL DCOPY( N, LE( 1, I ), 1, LE( 1, 2 ), 1 )
503                  CALL DCOPY( N, LE( 1, I+1 ), 1, LE( 1, 3 ), 1 )
504               END IF
505  190       CONTINUE
506            IF( IFND.EQ.0 ) THEN
507               ICMP = 1
508            ELSE
509               ICMP = 3
510            END IF
511         ELSE
512            LCMP( 1 ) = 1
513            LCMP( 2 ) = 2
514            IFND = 0
515            DO 200 I = 3, N
516               IF( IFND.EQ.1 .OR. WI( I ).NE.ZERO ) THEN
517                  SELECT( I ) = .FALSE.
518               ELSE
519                  LCMP( 3 ) = I
520                  IFND = 1
521                  CALL DCOPY( N, RE( 1, I ), 1, RE( 1, 3 ), 1 )
522                  CALL DCOPY( N, LE( 1, I ), 1, LE( 1, 3 ), 1 )
523               END IF
524  200       CONTINUE
525            IF( IFND.EQ.0 ) THEN
526               ICMP = 2
527            ELSE
528               ICMP = 3
529            END IF
530         END IF
531*
532*        Compute all selected condition numbers
533*
534         CALL DCOPY( ICMP, DUM, 0, STMP, 1 )
535         CALL DCOPY( ICMP, DUM, 0, SEPTMP, 1 )
536         CALL DTRSNA( 'Bothcond', 'Some', SELECT, N, T, LDT, LE, LDT,
537     $                RE, LDT, STMP, SEPTMP, N, M, WORK, N, IWORK,
538     $                INFO )
539         IF( INFO.NE.0 ) THEN
540            LMAX( 3 ) = KNT
541            NINFO( 3 ) = NINFO( 3 ) + 1
542            GO TO 240
543         END IF
544         DO 210 I = 1, ICMP
545            J = LCMP( I )
546            IF( SEPTMP( I ).NE.SEP( J ) )
547     $         VMAX = ONE / EPS
548            IF( STMP( I ).NE.S( J ) )
549     $         VMAX = ONE / EPS
550  210    CONTINUE
551*
552*        Compute selected eigenvalue condition numbers
553*
554         CALL DCOPY( ICMP, DUM, 0, STMP, 1 )
555         CALL DCOPY( ICMP, DUM, 0, SEPTMP, 1 )
556         CALL DTRSNA( 'Eigcond', 'Some', SELECT, N, T, LDT, LE, LDT, RE,
557     $                LDT, STMP, SEPTMP, N, M, WORK, N, IWORK, INFO )
558         IF( INFO.NE.0 ) THEN
559            LMAX( 3 ) = KNT
560            NINFO( 3 ) = NINFO( 3 ) + 1
561            GO TO 240
562         END IF
563         DO 220 I = 1, ICMP
564            J = LCMP( I )
565            IF( STMP( I ).NE.S( J ) )
566     $         VMAX = ONE / EPS
567            IF( SEPTMP( I ).NE.DUM( 1 ) )
568     $         VMAX = ONE / EPS
569  220    CONTINUE
570*
571*        Compute selected eigenvector condition numbers
572*
573         CALL DCOPY( ICMP, DUM, 0, STMP, 1 )
574         CALL DCOPY( ICMP, DUM, 0, SEPTMP, 1 )
575         CALL DTRSNA( 'Veccond', 'Some', SELECT, N, T, LDT, LE, LDT, RE,
576     $                LDT, STMP, SEPTMP, N, M, WORK, N, IWORK, INFO )
577         IF( INFO.NE.0 ) THEN
578            LMAX( 3 ) = KNT
579            NINFO( 3 ) = NINFO( 3 ) + 1
580            GO TO 240
581         END IF
582         DO 230 I = 1, ICMP
583            J = LCMP( I )
584            IF( STMP( I ).NE.DUM( 1 ) )
585     $         VMAX = ONE / EPS
586            IF( SEPTMP( I ).NE.SEP( J ) )
587     $         VMAX = ONE / EPS
588  230    CONTINUE
589         IF( VMAX.GT.RMAX( 1 ) ) THEN
590            RMAX( 1 ) = VMAX
591            IF( NINFO( 1 ).EQ.0 )
592     $         LMAX( 1 ) = KNT
593         END IF
594  240 CONTINUE
595      GO TO 10
596*
597*     End of DGET37
598*
599      END
600