You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cget37.f 19 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  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 December 2016
  87. *
  88. *> \ingroup complex_eig
  89. *
  90. * =====================================================================
  91. SUBROUTINE CGET37( RMAX, LMAX, NINFO, KNT, NIN )
  92. *
  93. * -- LAPACK test routine (version 3.7.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. * December 2016
  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