71467bf4b8b2d1f2f9214e9db6f9ca42329a1cf3
[platform/upstream/lapack.git] / TESTING / EIG / cget37.f
1 *> \brief \b CGET37
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 CGET37( RMAX, LMAX, NINFO, KNT, NIN )
12
13 *       .. Scalar Arguments ..
14 *       INTEGER            KNT, NIN
15 *       ..
16 *       .. Array Arguments ..
17 *       INTEGER            LMAX( 3 ), NINFO( 3 )
18 *       REAL               RMAX( 3 )
19 *       ..
20 *  
21 *
22 *> \par Purpose:
23 *  =============
24 *>
25 *> \verbatim
26 *>
27 *> CGET37 tests CTRSNA, 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 REAL array, dimension (3)
39 *>          Value of the largest test ratio.
40 *>          RMAX(1) = largest ratio comparing different calls to CTRSNA
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 CGEHRD returns INFO nonzero on example i, LMAX(1)=i
54 *>          If CHSEQR returns INFO nonzero on example i, LMAX(2)=i
55 *>          If CTRSNA 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 CGEHRD returned INFO nonzero
62 *>          NINFO(2) = No. of times CHSEQR returned INFO nonzero
63 *>          NINFO(3) = No. of times CTRSNA 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 *> \date November 2011
87 *
88 *> \ingroup complex_eig
89 *
90 *  =====================================================================
91       SUBROUTINE CGET37( RMAX, LMAX, NINFO, KNT, NIN )
92 *
93 *  -- LAPACK test routine (version 3.4.0) --
94 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
95 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
96 *     November 2011
97 *
98 *     .. Scalar Arguments ..
99       INTEGER            KNT, NIN
100 *     ..
101 *     .. Array Arguments ..
102       INTEGER            LMAX( 3 ), NINFO( 3 )
103       REAL               RMAX( 3 )
104 *     ..
105 *
106 *  =====================================================================
107 *
108 *     .. Parameters ..
109       REAL               ZERO, ONE, TWO
110       PARAMETER          ( ZERO = 0.0E0, ONE = 1.0E0, TWO = 2.0E0 )
111       REAL               EPSIN
112       PARAMETER          ( EPSIN = 5.9605E-8 )
113       INTEGER            LDT, LWORK
114       PARAMETER          ( LDT = 20, LWORK = 2*LDT*( 10+LDT ) )
115 *     ..
116 *     .. Local Scalars ..
117       INTEGER            I, ICMP, INFO, ISCL, ISRT, J, KMIN, M, N
118       REAL               BIGNUM, EPS, SMLNUM, TNRM, TOL, TOLIN, V,
119      $                   VCMIN, VMAX, VMIN, VMUL
120 *     ..
121 *     .. Local Arrays ..
122       LOGICAL            SELECT( LDT )
123       INTEGER            LCMP( 3 )
124       REAL               DUM( 1 ), RWORK( 2*LDT ), S( LDT ), SEP( LDT ),
125      $                   SEPIN( LDT ), SEPTMP( LDT ), SIN( LDT ),
126      $                   STMP( LDT ), VAL( 3 ), WIIN( LDT ),
127      $                   WRIN( LDT ), WSRT( LDT )
128       COMPLEX            CDUM( 1 ), LE( LDT, LDT ), RE( LDT, LDT ),
129      $                   T( LDT, LDT ), TMP( LDT, LDT ), W( LDT ),
130      $                   WORK( LWORK ), WTMP( LDT )
131 *     ..
132 *     .. External Functions ..
133       REAL               CLANGE, SLAMCH
134       EXTERNAL           CLANGE, SLAMCH
135 *     ..
136 *     .. External Subroutines ..
137       EXTERNAL           CCOPY, CGEHRD, CHSEQR, CLACPY, CSSCAL, CTREVC,
138      $                   CTRSNA, SCOPY, SLABAD, SSCAL
139 *     ..
140 *     .. Intrinsic Functions ..
141       INTRINSIC          AIMAG, MAX, REAL, SQRT
142 *     ..
143 *     .. Executable Statements ..
144 *
145       EPS = SLAMCH( 'P' )
146       SMLNUM = SLAMCH( 'S' ) / EPS
147       BIGNUM = ONE / SMLNUM
148       CALL SLABAD( SMLNUM, BIGNUM )
149 *
150 *     EPSIN = 2**(-24) = precision to which input data computed
151 *
152       EPS = MAX( EPS, EPSIN )
153       RMAX( 1 ) = ZERO
154       RMAX( 2 ) = ZERO
155       RMAX( 3 ) = ZERO
156       LMAX( 1 ) = 0
157       LMAX( 2 ) = 0
158       LMAX( 3 ) = 0
159       KNT = 0
160       NINFO( 1 ) = 0
161       NINFO( 2 ) = 0
162       NINFO( 3 ) = 0
163       VAL( 1 ) = SQRT( SMLNUM )
164       VAL( 2 ) = ONE
165       VAL( 3 ) = SQRT( BIGNUM )
166 *
167 *     Read input data until N=0.  Assume input eigenvalues are sorted
168 *     lexicographically (increasing by real part if ISRT = 0,
169 *     increasing by imaginary part if ISRT = 1)
170 *
171    10 CONTINUE
172       READ( NIN, FMT = * )N, ISRT
173       IF( N.EQ.0 )
174      $   RETURN
175       DO 20 I = 1, N
176          READ( NIN, FMT = * )( TMP( I, J ), J = 1, N )
177    20 CONTINUE
178       DO 30 I = 1, N
179          READ( NIN, FMT = * )WRIN( I ), WIIN( I ), SIN( I ), SEPIN( I )
180    30 CONTINUE
181       TNRM = CLANGE( 'M', N, N, TMP, LDT, RWORK )
182       DO 260 ISCL = 1, 3
183 *
184 *        Scale input matrix
185 *
186          KNT = KNT + 1
187          CALL CLACPY( 'F', N, N, TMP, LDT, T, LDT )
188          VMUL = VAL( ISCL )
189          DO 40 I = 1, N
190             CALL CSSCAL( N, VMUL, T( 1, I ), 1 )
191    40    CONTINUE
192          IF( TNRM.EQ.ZERO )
193      $      VMUL = ONE
194 *
195 *        Compute eigenvalues and eigenvectors
196 *
197          CALL CGEHRD( N, 1, N, T, LDT, WORK( 1 ), WORK( N+1 ), LWORK-N,
198      $                INFO )
199          IF( INFO.NE.0 ) THEN
200             LMAX( 1 ) = KNT
201             NINFO( 1 ) = NINFO( 1 ) + 1
202             GO TO 260
203          END IF
204          DO 60 J = 1, N - 2
205             DO 50 I = J + 2, N
206                T( I, J ) = ZERO
207    50       CONTINUE
208    60    CONTINUE
209 *
210 *        Compute Schur form
211 *
212          CALL CHSEQR( 'S', 'N', N, 1, N, T, LDT, W, CDUM, 1, WORK,
213      $                LWORK, INFO )
214          IF( INFO.NE.0 ) THEN
215             LMAX( 2 ) = KNT
216             NINFO( 2 ) = NINFO( 2 ) + 1
217             GO TO 260
218          END IF
219 *
220 *        Compute eigenvectors
221 *
222          DO 70 I = 1, N
223             SELECT( I ) = .TRUE.
224    70    CONTINUE
225          CALL CTREVC( 'B', 'A', SELECT, N, T, LDT, LE, LDT, RE, LDT, N,
226      $                M, WORK, RWORK, INFO )
227 *
228 *        Compute condition numbers
229 *
230          CALL CTRSNA( 'B', 'A', SELECT, N, T, LDT, LE, LDT, RE, LDT, S,
231      $                SEP, N, M, WORK, N, RWORK, INFO )
232          IF( INFO.NE.0 ) THEN
233             LMAX( 3 ) = KNT
234             NINFO( 3 ) = NINFO( 3 ) + 1
235             GO TO 260
236          END IF
237 *
238 *        Sort eigenvalues and condition numbers lexicographically
239 *        to compare with inputs
240 *
241          CALL CCOPY( N, W, 1, WTMP, 1 )
242          IF( ISRT.EQ.0 ) THEN
243 *
244 *           Sort by increasing real part
245 *
246             DO 80 I = 1, N
247                WSRT( I ) = REAL( W( I ) )
248    80       CONTINUE
249          ELSE
250 *
251 *           Sort by increasing imaginary part
252 *
253             DO 90 I = 1, N
254                WSRT( I ) = AIMAG( W( I ) )
255    90       CONTINUE
256          END IF
257          CALL SCOPY( N, S, 1, STMP, 1 )
258          CALL SCOPY( N, SEP, 1, SEPTMP, 1 )
259          CALL SSCAL( N, ONE / VMUL, SEPTMP, 1 )
260          DO 110 I = 1, N - 1
261             KMIN = I
262             VMIN = WSRT( I )
263             DO 100 J = I + 1, N
264                IF( WSRT( J ).LT.VMIN ) THEN
265                   KMIN = J
266                   VMIN = WSRT( J )
267                END IF
268   100       CONTINUE
269             WSRT( KMIN ) = WSRT( I )
270             WSRT( I ) = VMIN
271             VCMIN = WTMP( I )
272             WTMP( I ) = W( KMIN )
273             WTMP( KMIN ) = VCMIN
274             VMIN = STMP( KMIN )
275             STMP( KMIN ) = STMP( I )
276             STMP( I ) = VMIN
277             VMIN = SEPTMP( KMIN )
278             SEPTMP( KMIN ) = SEPTMP( I )
279             SEPTMP( I ) = VMIN
280   110    CONTINUE
281 *
282 *        Compare condition numbers for eigenvalues
283 *        taking their condition numbers into account
284 *
285          V = MAX( TWO*REAL( N )*EPS*TNRM, SMLNUM )
286          IF( TNRM.EQ.ZERO )
287      $      V = ONE
288          DO 120 I = 1, N
289             IF( V.GT.SEPTMP( I ) ) THEN
290                TOL = ONE
291             ELSE
292                TOL = V / SEPTMP( I )
293             END IF
294             IF( V.GT.SEPIN( I ) ) THEN
295                TOLIN = ONE
296             ELSE
297                TOLIN = V / SEPIN( I )
298             END IF
299             TOL = MAX( TOL, SMLNUM / EPS )
300             TOLIN = MAX( TOLIN, SMLNUM / EPS )
301             IF( EPS*( SIN( I )-TOLIN ).GT.STMP( I )+TOL ) THEN
302                VMAX = ONE / EPS
303             ELSE IF( SIN( I )-TOLIN.GT.STMP( I )+TOL ) THEN
304                VMAX = ( SIN( I )-TOLIN ) / ( STMP( I )+TOL )
305             ELSE IF( SIN( I )+TOLIN.LT.EPS*( STMP( I )-TOL ) ) THEN
306                VMAX = ONE / EPS
307             ELSE IF( SIN( I )+TOLIN.LT.STMP( I )-TOL ) THEN
308                VMAX = ( STMP( I )-TOL ) / ( SIN( I )+TOLIN )
309             ELSE
310                VMAX = ONE
311             END IF
312             IF( VMAX.GT.RMAX( 2 ) ) THEN
313                RMAX( 2 ) = VMAX
314                IF( NINFO( 2 ).EQ.0 )
315      $            LMAX( 2 ) = KNT
316             END IF
317   120    CONTINUE
318 *
319 *        Compare condition numbers for eigenvectors
320 *        taking their condition numbers into account
321 *
322          DO 130 I = 1, N
323             IF( V.GT.SEPTMP( I )*STMP( I ) ) THEN
324                TOL = SEPTMP( I )
325             ELSE
326                TOL = V / STMP( I )
327             END IF
328             IF( V.GT.SEPIN( I )*SIN( I ) ) THEN
329                TOLIN = SEPIN( I )
330             ELSE
331                TOLIN = V / SIN( I )
332             END IF
333             TOL = MAX( TOL, SMLNUM / EPS )
334             TOLIN = MAX( TOLIN, SMLNUM / EPS )
335             IF( EPS*( SEPIN( I )-TOLIN ).GT.SEPTMP( I )+TOL ) THEN
336                VMAX = ONE / EPS
337             ELSE IF( SEPIN( I )-TOLIN.GT.SEPTMP( I )+TOL ) THEN
338                VMAX = ( SEPIN( I )-TOLIN ) / ( SEPTMP( I )+TOL )
339             ELSE IF( SEPIN( I )+TOLIN.LT.EPS*( SEPTMP( I )-TOL ) ) THEN
340                VMAX = ONE / EPS
341             ELSE IF( SEPIN( I )+TOLIN.LT.SEPTMP( I )-TOL ) THEN
342                VMAX = ( SEPTMP( I )-TOL ) / ( SEPIN( I )+TOLIN )
343             ELSE
344                VMAX = ONE
345             END IF
346             IF( VMAX.GT.RMAX( 2 ) ) THEN
347                RMAX( 2 ) = VMAX
348                IF( NINFO( 2 ).EQ.0 )
349      $            LMAX( 2 ) = KNT
350             END IF
351   130    CONTINUE
352 *
353 *        Compare condition numbers for eigenvalues
354 *        without taking their condition numbers into account
355 *
356          DO 140 I = 1, N
357             IF( SIN( I ).LE.REAL( 2*N )*EPS .AND. STMP( I ).LE.
358      $          REAL( 2*N )*EPS ) THEN
359                VMAX = ONE
360             ELSE IF( EPS*SIN( I ).GT.STMP( I ) ) THEN
361                VMAX = ONE / EPS
362             ELSE IF( SIN( I ).GT.STMP( I ) ) THEN
363                VMAX = SIN( I ) / STMP( I )
364             ELSE IF( SIN( I ).LT.EPS*STMP( I ) ) THEN
365                VMAX = ONE / EPS
366             ELSE IF( SIN( I ).LT.STMP( I ) ) THEN
367                VMAX = STMP( I ) / SIN( I )
368             ELSE
369                VMAX = ONE
370             END IF
371             IF( VMAX.GT.RMAX( 3 ) ) THEN
372                RMAX( 3 ) = VMAX
373                IF( NINFO( 3 ).EQ.0 )
374      $            LMAX( 3 ) = KNT
375             END IF
376   140    CONTINUE
377 *
378 *        Compare condition numbers for eigenvectors
379 *        without taking their condition numbers into account
380 *
381          DO 150 I = 1, N
382             IF( SEPIN( I ).LE.V .AND. SEPTMP( I ).LE.V ) THEN
383                VMAX = ONE
384             ELSE IF( EPS*SEPIN( I ).GT.SEPTMP( I ) ) THEN
385                VMAX = ONE / EPS
386             ELSE IF( SEPIN( I ).GT.SEPTMP( I ) ) THEN
387                VMAX = SEPIN( I ) / SEPTMP( I )
388             ELSE IF( SEPIN( I ).LT.EPS*SEPTMP( I ) ) THEN
389                VMAX = ONE / EPS
390             ELSE IF( SEPIN( I ).LT.SEPTMP( I ) ) THEN
391                VMAX = SEPTMP( I ) / SEPIN( I )
392             ELSE
393                VMAX = ONE
394             END IF
395             IF( VMAX.GT.RMAX( 3 ) ) THEN
396                RMAX( 3 ) = VMAX
397                IF( NINFO( 3 ).EQ.0 )
398      $            LMAX( 3 ) = KNT
399             END IF
400   150    CONTINUE
401 *
402 *        Compute eigenvalue condition numbers only and compare
403 *
404          VMAX = ZERO
405          DUM( 1 ) = -ONE
406          CALL SCOPY( N, DUM, 0, STMP, 1 )
407          CALL SCOPY( N, DUM, 0, SEPTMP, 1 )
408          CALL CTRSNA( 'E', 'A', SELECT, N, T, LDT, LE, LDT, RE, LDT,
409      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
410          IF( INFO.NE.0 ) THEN
411             LMAX( 3 ) = KNT
412             NINFO( 3 ) = NINFO( 3 ) + 1
413             GO TO 260
414          END IF
415          DO 160 I = 1, N
416             IF( STMP( I ).NE.S( I ) )
417      $         VMAX = ONE / EPS
418             IF( SEPTMP( I ).NE.DUM( 1 ) )
419      $         VMAX = ONE / EPS
420   160    CONTINUE
421 *
422 *        Compute eigenvector condition numbers only and compare
423 *
424          CALL SCOPY( N, DUM, 0, STMP, 1 )
425          CALL SCOPY( N, DUM, 0, SEPTMP, 1 )
426          CALL CTRSNA( 'V', 'A', SELECT, N, T, LDT, LE, LDT, RE, LDT,
427      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
428          IF( INFO.NE.0 ) THEN
429             LMAX( 3 ) = KNT
430             NINFO( 3 ) = NINFO( 3 ) + 1
431             GO TO 260
432          END IF
433          DO 170 I = 1, N
434             IF( STMP( I ).NE.DUM( 1 ) )
435      $         VMAX = ONE / EPS
436             IF( SEPTMP( I ).NE.SEP( I ) )
437      $         VMAX = ONE / EPS
438   170    CONTINUE
439 *
440 *        Compute all condition numbers using SELECT and compare
441 *
442          DO 180 I = 1, N
443             SELECT( I ) = .TRUE.
444   180    CONTINUE
445          CALL SCOPY( N, DUM, 0, STMP, 1 )
446          CALL SCOPY( N, DUM, 0, SEPTMP, 1 )
447          CALL CTRSNA( 'B', 'S', SELECT, N, T, LDT, LE, LDT, RE, LDT,
448      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
449          IF( INFO.NE.0 ) THEN
450             LMAX( 3 ) = KNT
451             NINFO( 3 ) = NINFO( 3 ) + 1
452             GO TO 260
453          END IF
454          DO 190 I = 1, N
455             IF( SEPTMP( I ).NE.SEP( I ) )
456      $         VMAX = ONE / EPS
457             IF( STMP( I ).NE.S( I ) )
458      $         VMAX = ONE / EPS
459   190    CONTINUE
460 *
461 *        Compute eigenvalue condition numbers using SELECT and compare
462 *
463          CALL SCOPY( N, DUM, 0, STMP, 1 )
464          CALL SCOPY( N, DUM, 0, SEPTMP, 1 )
465          CALL CTRSNA( 'E', 'S', SELECT, N, T, LDT, LE, LDT, RE, LDT,
466      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
467          IF( INFO.NE.0 ) THEN
468             LMAX( 3 ) = KNT
469             NINFO( 3 ) = NINFO( 3 ) + 1
470             GO TO 260
471          END IF
472          DO 200 I = 1, N
473             IF( STMP( I ).NE.S( I ) )
474      $         VMAX = ONE / EPS
475             IF( SEPTMP( I ).NE.DUM( 1 ) )
476      $         VMAX = ONE / EPS
477   200    CONTINUE
478 *
479 *        Compute eigenvector condition numbers using SELECT and compare
480 *
481          CALL SCOPY( N, DUM, 0, STMP, 1 )
482          CALL SCOPY( N, DUM, 0, SEPTMP, 1 )
483          CALL CTRSNA( 'V', 'S', SELECT, N, T, LDT, LE, LDT, RE, LDT,
484      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
485          IF( INFO.NE.0 ) THEN
486             LMAX( 3 ) = KNT
487             NINFO( 3 ) = NINFO( 3 ) + 1
488             GO TO 260
489          END IF
490          DO 210 I = 1, N
491             IF( STMP( I ).NE.DUM( 1 ) )
492      $         VMAX = ONE / EPS
493             IF( SEPTMP( I ).NE.SEP( I ) )
494      $         VMAX = ONE / EPS
495   210    CONTINUE
496          IF( VMAX.GT.RMAX( 1 ) ) THEN
497             RMAX( 1 ) = VMAX
498             IF( NINFO( 1 ).EQ.0 )
499      $         LMAX( 1 ) = KNT
500          END IF
501 *
502 *        Select second and next to last eigenvalues
503 *
504          DO 220 I = 1, N
505             SELECT( I ) = .FALSE.
506   220    CONTINUE
507          ICMP = 0
508          IF( N.GT.1 ) THEN
509             ICMP = 1
510             LCMP( 1 ) = 2
511             SELECT( 2 ) = .TRUE.
512             CALL CCOPY( N, RE( 1, 2 ), 1, RE( 1, 1 ), 1 )
513             CALL CCOPY( N, LE( 1, 2 ), 1, LE( 1, 1 ), 1 )
514          END IF
515          IF( N.GT.3 ) THEN
516             ICMP = 2
517             LCMP( 2 ) = N - 1
518             SELECT( N-1 ) = .TRUE.
519             CALL CCOPY( N, RE( 1, N-1 ), 1, RE( 1, 2 ), 1 )
520             CALL CCOPY( N, LE( 1, N-1 ), 1, LE( 1, 2 ), 1 )
521          END IF
522 *
523 *        Compute all selected condition numbers
524 *
525          CALL SCOPY( ICMP, DUM, 0, STMP, 1 )
526          CALL SCOPY( ICMP, DUM, 0, SEPTMP, 1 )
527          CALL CTRSNA( 'B', 'S', SELECT, N, T, LDT, LE, LDT, RE, LDT,
528      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
529          IF( INFO.NE.0 ) THEN
530             LMAX( 3 ) = KNT
531             NINFO( 3 ) = NINFO( 3 ) + 1
532             GO TO 260
533          END IF
534          DO 230 I = 1, ICMP
535             J = LCMP( I )
536             IF( SEPTMP( I ).NE.SEP( J ) )
537      $         VMAX = ONE / EPS
538             IF( STMP( I ).NE.S( J ) )
539      $         VMAX = ONE / EPS
540   230    CONTINUE
541 *
542 *        Compute selected eigenvalue condition numbers
543 *
544          CALL SCOPY( ICMP, DUM, 0, STMP, 1 )
545          CALL SCOPY( ICMP, DUM, 0, SEPTMP, 1 )
546          CALL CTRSNA( 'E', 'S', SELECT, N, T, LDT, LE, LDT, RE, LDT,
547      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
548          IF( INFO.NE.0 ) THEN
549             LMAX( 3 ) = KNT
550             NINFO( 3 ) = NINFO( 3 ) + 1
551             GO TO 260
552          END IF
553          DO 240 I = 1, ICMP
554             J = LCMP( I )
555             IF( STMP( I ).NE.S( J ) )
556      $         VMAX = ONE / EPS
557             IF( SEPTMP( I ).NE.DUM( 1 ) )
558      $         VMAX = ONE / EPS
559   240    CONTINUE
560 *
561 *        Compute selected eigenvector condition numbers
562 *
563          CALL SCOPY( ICMP, DUM, 0, STMP, 1 )
564          CALL SCOPY( ICMP, DUM, 0, SEPTMP, 1 )
565          CALL CTRSNA( 'V', 'S', SELECT, N, T, LDT, LE, LDT, RE, LDT,
566      $                STMP, SEPTMP, N, M, WORK, N, RWORK, INFO )
567          IF( INFO.NE.0 ) THEN
568             LMAX( 3 ) = KNT
569             NINFO( 3 ) = NINFO( 3 ) + 1
570             GO TO 260
571          END IF
572          DO 250 I = 1, ICMP
573             J = LCMP( I )
574             IF( STMP( I ).NE.DUM( 1 ) )
575      $         VMAX = ONE / EPS
576             IF( SEPTMP( I ).NE.SEP( J ) )
577      $         VMAX = ONE / EPS
578   250    CONTINUE
579          IF( VMAX.GT.RMAX( 1 ) ) THEN
580             RMAX( 1 ) = VMAX
581             IF( NINFO( 1 ).EQ.0 )
582      $         LMAX( 1 ) = KNT
583          END IF
584   260 CONTINUE
585       GO TO 10
586 *
587 *     End of CGET37
588 *
589       END