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.

ilaenv.f 22 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  1. *> \brief \b ILAENV
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. *> \htmlonly
  9. *> Download ILAENV + dependencies
  10. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaenv.f">
  11. *> [TGZ]</a>
  12. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaenv.f">
  13. *> [ZIP]</a>
  14. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaenv.f">
  15. *> [TXT]</a>
  16. *> \endhtmlonly
  17. *
  18. * Definition:
  19. * ===========
  20. *
  21. * INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  22. *
  23. * .. Scalar Arguments ..
  24. * CHARACTER*( * ) NAME, OPTS
  25. * INTEGER ISPEC, N1, N2, N3, N4
  26. * ..
  27. *
  28. *
  29. *> \par Purpose:
  30. * =============
  31. *>
  32. *> \verbatim
  33. *>
  34. *> ILAENV is called from the LAPACK routines to choose problem-dependent
  35. *> parameters for the local environment. See ISPEC for a description of
  36. *> the parameters.
  37. *>
  38. *> ILAENV returns an INTEGER
  39. *> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
  40. *> if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value.
  41. *>
  42. *> This version provides a set of parameters which should give good,
  43. *> but not optimal, performance on many of the currently available
  44. *> computers. Users are encouraged to modify this subroutine to set
  45. *> the tuning parameters for their particular machine using the option
  46. *> and problem size information in the arguments.
  47. *>
  48. *> This routine will not function correctly if it is converted to all
  49. *> lower case. Converting it to all upper case is allowed.
  50. *> \endverbatim
  51. *
  52. * Arguments:
  53. * ==========
  54. *
  55. *> \param[in] ISPEC
  56. *> \verbatim
  57. *> ISPEC is INTEGER
  58. *> Specifies the parameter to be returned as the value of
  59. *> ILAENV.
  60. *> = 1: the optimal blocksize; if this value is 1, an unblocked
  61. *> algorithm will give the best performance.
  62. *> = 2: the minimum block size for which the block routine
  63. *> should be used; if the usable block size is less than
  64. *> this value, an unblocked routine should be used.
  65. *> = 3: the crossover point (in a block routine, for N less
  66. *> than this value, an unblocked routine should be used)
  67. *> = 4: the number of shifts, used in the nonsymmetric
  68. *> eigenvalue routines (DEPRECATED)
  69. *> = 5: the minimum column dimension for blocking to be used;
  70. *> rectangular blocks must have dimension at least k by m,
  71. *> where k is given by ILAENV(2,...) and m by ILAENV(5,...)
  72. *> = 6: the crossover point for the SVD (when reducing an m by n
  73. *> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
  74. *> this value, a QR factorization is used first to reduce
  75. *> the matrix to a triangular form.)
  76. *> = 7: the number of processors
  77. *> = 8: the crossover point for the multishift QR method
  78. *> for nonsymmetric eigenvalue problems (DEPRECATED)
  79. *> = 9: maximum size of the subproblems at the bottom of the
  80. *> computation tree in the divide-and-conquer algorithm
  81. *> (used by xGELSD and xGESDD)
  82. *> =10: ieee infinity and NaN arithmetic can be trusted not to trap
  83. *> =11: infinity arithmetic can be trusted not to trap
  84. *> 12 <= ISPEC <= 17:
  85. *> xHSEQR or related subroutines,
  86. *> see IPARMQ for detailed explanation
  87. *> \endverbatim
  88. *>
  89. *> \param[in] NAME
  90. *> \verbatim
  91. *> NAME is CHARACTER*(*)
  92. *> The name of the calling subroutine, in either upper case or
  93. *> lower case.
  94. *> \endverbatim
  95. *>
  96. *> \param[in] OPTS
  97. *> \verbatim
  98. *> OPTS is CHARACTER*(*)
  99. *> The character options to the subroutine NAME, concatenated
  100. *> into a single character string. For example, UPLO = 'U',
  101. *> TRANS = 'T', and DIAG = 'N' for a triangular routine would
  102. *> be specified as OPTS = 'UTN'.
  103. *> \endverbatim
  104. *>
  105. *> \param[in] N1
  106. *> \verbatim
  107. *> N1 is INTEGER
  108. *> \endverbatim
  109. *>
  110. *> \param[in] N2
  111. *> \verbatim
  112. *> N2 is INTEGER
  113. *> \endverbatim
  114. *>
  115. *> \param[in] N3
  116. *> \verbatim
  117. *> N3 is INTEGER
  118. *> \endverbatim
  119. *>
  120. *> \param[in] N4
  121. *> \verbatim
  122. *> N4 is INTEGER
  123. *> Problem dimensions for the subroutine NAME; these may not all
  124. *> be required.
  125. *> \endverbatim
  126. *
  127. * Authors:
  128. * ========
  129. *
  130. *> \author Univ. of Tennessee
  131. *> \author Univ. of California Berkeley
  132. *> \author Univ. of Colorado Denver
  133. *> \author NAG Ltd.
  134. *
  135. *> \ingroup ilaenv
  136. *
  137. *> \par Further Details:
  138. * =====================
  139. *>
  140. *> \verbatim
  141. *>
  142. *> The following conventions have been used when calling ILAENV from the
  143. *> LAPACK routines:
  144. *> 1) OPTS is a concatenation of all of the character options to
  145. *> subroutine NAME, in the same order that they appear in the
  146. *> argument list for NAME, even if they are not used in determining
  147. *> the value of the parameter specified by ISPEC.
  148. *> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
  149. *> that they appear in the argument list for NAME. N1 is used
  150. *> first, N2 second, and so on, and unused problem dimensions are
  151. *> passed a value of -1.
  152. *> 3) The parameter value returned by ILAENV is checked for validity in
  153. *> the calling subroutine. For example, ILAENV is used to retrieve
  154. *> the optimal blocksize for STRTRI as follows:
  155. *>
  156. *> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
  157. *> IF( NB.LE.1 ) NB = MAX( 1, N )
  158. *> \endverbatim
  159. *>
  160. * =====================================================================
  161. INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  162. *
  163. * -- LAPACK auxiliary routine --
  164. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  165. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  166. *
  167. * .. Scalar Arguments ..
  168. CHARACTER*( * ) NAME, OPTS
  169. INTEGER ISPEC, N1, N2, N3, N4
  170. * ..
  171. *
  172. * =====================================================================
  173. *
  174. * .. Local Scalars ..
  175. INTEGER I, IC, IZ, NB, NBMIN, NX
  176. LOGICAL CNAME, SNAME, TWOSTAGE
  177. CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*16
  178. * ..
  179. * .. Intrinsic Functions ..
  180. INTRINSIC CHAR, ICHAR, INT, MIN, REAL
  181. * ..
  182. * .. External Functions ..
  183. INTEGER IEEECK, IPARMQ, IPARAM2STAGE
  184. EXTERNAL IEEECK, IPARMQ, IPARAM2STAGE
  185. * ..
  186. * .. Executable Statements ..
  187. *
  188. GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
  189. $ 130, 140, 150, 160, 160, 160, 160, 160, 160)ISPEC
  190. *
  191. * Invalid value for ISPEC
  192. *
  193. ILAENV = -1
  194. RETURN
  195. *
  196. 10 CONTINUE
  197. *
  198. * Convert NAME to upper case if the first character is lower case.
  199. *
  200. ILAENV = 1
  201. SUBNAM = NAME
  202. IC = ICHAR( SUBNAM( 1: 1 ) )
  203. IZ = ICHAR( 'Z' )
  204. IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
  205. *
  206. * ASCII character set
  207. *
  208. IF( IC.GE.97 .AND. IC.LE.122 ) THEN
  209. SUBNAM( 1: 1 ) = CHAR( IC-32 )
  210. DO 20 I = 2, 6
  211. IC = ICHAR( SUBNAM( I: I ) )
  212. IF( IC.GE.97 .AND. IC.LE.122 )
  213. $ SUBNAM( I: I ) = CHAR( IC-32 )
  214. 20 CONTINUE
  215. END IF
  216. *
  217. ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
  218. *
  219. * EBCDIC character set
  220. *
  221. IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  222. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  223. $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
  224. SUBNAM( 1: 1 ) = CHAR( IC+64 )
  225. DO 30 I = 2, 6
  226. IC = ICHAR( SUBNAM( I: I ) )
  227. IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  228. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  229. $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
  230. $ I ) = CHAR( IC+64 )
  231. 30 CONTINUE
  232. END IF
  233. *
  234. ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
  235. *
  236. * Prime machines: ASCII+128
  237. *
  238. IF( IC.GE.225 .AND. IC.LE.250 ) THEN
  239. SUBNAM( 1: 1 ) = CHAR( IC-32 )
  240. DO 40 I = 2, 6
  241. IC = ICHAR( SUBNAM( I: I ) )
  242. IF( IC.GE.225 .AND. IC.LE.250 )
  243. $ SUBNAM( I: I ) = CHAR( IC-32 )
  244. 40 CONTINUE
  245. END IF
  246. END IF
  247. *
  248. C1 = SUBNAM( 1: 1 )
  249. SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
  250. CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
  251. IF( .NOT.( CNAME .OR. SNAME ) )
  252. $ RETURN
  253. C2 = SUBNAM( 2: 3 )
  254. C3 = SUBNAM( 4: 6 )
  255. C4 = C3( 2: 3 )
  256. TWOSTAGE = LEN( SUBNAM ).GE.11
  257. $ .AND. SUBNAM( 11: 11 ).EQ.'2'
  258. *
  259. GO TO ( 50, 60, 70 )ISPEC
  260. *
  261. 50 CONTINUE
  262. *
  263. * ISPEC = 1: block size
  264. *
  265. * In these examples, separate code is provided for setting NB for
  266. * real and complex. We assume that NB will take the same value in
  267. * single or double precision.
  268. *
  269. NB = 1
  270. *
  271. IF( SUBNAM(2:6).EQ.'LAORH' ) THEN
  272. *
  273. * This is for *LAORHR_GETRFNP routine
  274. *
  275. IF( SNAME ) THEN
  276. NB = 32
  277. ELSE
  278. NB = 32
  279. END IF
  280. ELSE IF( C2.EQ.'GE' ) THEN
  281. IF( C3.EQ.'TRF' ) THEN
  282. IF( SNAME ) THEN
  283. NB = 64
  284. ELSE
  285. NB = 64
  286. END IF
  287. ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
  288. $ C3.EQ.'QLF' ) THEN
  289. IF( SNAME ) THEN
  290. NB = 32
  291. ELSE
  292. NB = 32
  293. END IF
  294. ELSE IF( C3.EQ.'QR ') THEN
  295. IF( N3 .EQ. 1) THEN
  296. IF( SNAME ) THEN
  297. * M*N
  298. IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  299. NB = N1
  300. ELSE
  301. NB = 32768/N2
  302. END IF
  303. ELSE
  304. IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  305. NB = N1
  306. ELSE
  307. NB = 32768/N2
  308. END IF
  309. END IF
  310. ELSE
  311. IF( SNAME ) THEN
  312. NB = 1
  313. ELSE
  314. NB = 1
  315. END IF
  316. END IF
  317. ELSE IF( C3.EQ.'LQ ') THEN
  318. IF( N3 .EQ. 2) THEN
  319. IF( SNAME ) THEN
  320. * M*N
  321. IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  322. NB = N1
  323. ELSE
  324. NB = 32768/N2
  325. END IF
  326. ELSE
  327. IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  328. NB = N1
  329. ELSE
  330. NB = 32768/N2
  331. END IF
  332. END IF
  333. ELSE
  334. IF( SNAME ) THEN
  335. NB = 1
  336. ELSE
  337. NB = 1
  338. END IF
  339. END IF
  340. ELSE IF( C3.EQ.'HRD' ) THEN
  341. IF( SNAME ) THEN
  342. NB = 32
  343. ELSE
  344. NB = 32
  345. END IF
  346. ELSE IF( C3.EQ.'BRD' ) THEN
  347. IF( SNAME ) THEN
  348. NB = 32
  349. ELSE
  350. NB = 32
  351. END IF
  352. ELSE IF( C3.EQ.'TRI' ) THEN
  353. IF( SNAME ) THEN
  354. NB = 64
  355. ELSE
  356. NB = 64
  357. END IF
  358. ELSE IF( SUBNAM( 4: 7 ).EQ.'QP3RK' ) THEN
  359. IF( SNAME ) THEN
  360. NB = 32
  361. ELSE
  362. NB = 32
  363. END IF
  364. END IF
  365. ELSE IF( C2.EQ.'PO' ) THEN
  366. IF( C3.EQ.'TRF' ) THEN
  367. IF( SNAME ) THEN
  368. NB = 64
  369. ELSE
  370. NB = 64
  371. END IF
  372. END IF
  373. ELSE IF( C2.EQ.'SY' ) THEN
  374. IF( C3.EQ.'TRF' ) THEN
  375. IF( SNAME ) THEN
  376. IF( TWOSTAGE ) THEN
  377. NB = 192
  378. ELSE
  379. NB = 64
  380. END IF
  381. ELSE
  382. IF( TWOSTAGE ) THEN
  383. NB = 192
  384. ELSE
  385. NB = 64
  386. END IF
  387. END IF
  388. ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  389. NB = 32
  390. ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
  391. NB = 64
  392. END IF
  393. ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  394. IF( C3.EQ.'TRF' ) THEN
  395. IF( TWOSTAGE ) THEN
  396. NB = 192
  397. ELSE
  398. NB = 64
  399. END IF
  400. ELSE IF( C3.EQ.'TRD' ) THEN
  401. NB = 32
  402. ELSE IF( C3.EQ.'GST' ) THEN
  403. NB = 64
  404. END IF
  405. ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  406. IF( C3( 1: 1 ).EQ.'G' ) THEN
  407. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  408. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  409. $ THEN
  410. NB = 32
  411. END IF
  412. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  413. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  414. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  415. $ THEN
  416. NB = 32
  417. END IF
  418. END IF
  419. ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  420. IF( C3( 1: 1 ).EQ.'G' ) THEN
  421. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  422. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  423. $ THEN
  424. NB = 32
  425. END IF
  426. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  427. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  428. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  429. $ THEN
  430. NB = 32
  431. END IF
  432. END IF
  433. ELSE IF( C2.EQ.'GB' ) THEN
  434. IF( C3.EQ.'TRF' ) THEN
  435. IF( SNAME ) THEN
  436. IF( N4.LE.64 ) THEN
  437. NB = 1
  438. ELSE
  439. NB = 32
  440. END IF
  441. ELSE
  442. IF( N4.LE.64 ) THEN
  443. NB = 1
  444. ELSE
  445. NB = 32
  446. END IF
  447. END IF
  448. END IF
  449. ELSE IF( C2.EQ.'PB' ) THEN
  450. IF( C3.EQ.'TRF' ) THEN
  451. IF( SNAME ) THEN
  452. IF( N2.LE.64 ) THEN
  453. NB = 1
  454. ELSE
  455. NB = 32
  456. END IF
  457. ELSE
  458. IF( N2.LE.64 ) THEN
  459. NB = 1
  460. ELSE
  461. NB = 32
  462. END IF
  463. END IF
  464. END IF
  465. ELSE IF( C2.EQ.'TR' ) THEN
  466. IF( C3.EQ.'TRI' ) THEN
  467. IF( SNAME ) THEN
  468. NB = 64
  469. ELSE
  470. NB = 64
  471. END IF
  472. ELSE IF ( C3.EQ.'EVC' ) THEN
  473. IF( SNAME ) THEN
  474. NB = 64
  475. ELSE
  476. NB = 64
  477. END IF
  478. ELSE IF( C3.EQ.'SYL' ) THEN
  479. * The upper bound is to prevent overly aggressive scaling.
  480. IF( SNAME ) THEN
  481. NB = MIN( MAX( 48, INT( ( MIN( N1, N2 ) * 16 ) / 100) ),
  482. $ 240 )
  483. ELSE
  484. NB = MIN( MAX( 24, INT( ( MIN( N1, N2 ) * 8 ) / 100) ),
  485. $ 80 )
  486. END IF
  487. END IF
  488. ELSE IF( C2.EQ.'LA' ) THEN
  489. IF( C3.EQ.'UUM' ) THEN
  490. IF( SNAME ) THEN
  491. NB = 64
  492. ELSE
  493. NB = 64
  494. END IF
  495. ELSE IF( C3.EQ.'TRS' ) THEN
  496. IF( SNAME ) THEN
  497. NB = 32
  498. ELSE
  499. NB = 32
  500. END IF
  501. END IF
  502. ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
  503. IF( C3.EQ.'EBZ' ) THEN
  504. NB = 1
  505. END IF
  506. ELSE IF( C2.EQ.'GG' ) THEN
  507. NB = 32
  508. IF( C3.EQ.'HD3' ) THEN
  509. IF( SNAME ) THEN
  510. NB = 32
  511. ELSE
  512. NB = 32
  513. END IF
  514. END IF
  515. END IF
  516. ILAENV = NB
  517. RETURN
  518. *
  519. 60 CONTINUE
  520. *
  521. * ISPEC = 2: minimum block size
  522. *
  523. NBMIN = 2
  524. IF( C2.EQ.'GE' ) THEN
  525. IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  526. $ 'QLF' ) THEN
  527. IF( SNAME ) THEN
  528. NBMIN = 2
  529. ELSE
  530. NBMIN = 2
  531. END IF
  532. ELSE IF( C3.EQ.'HRD' ) THEN
  533. IF( SNAME ) THEN
  534. NBMIN = 2
  535. ELSE
  536. NBMIN = 2
  537. END IF
  538. ELSE IF( C3.EQ.'BRD' ) THEN
  539. IF( SNAME ) THEN
  540. NBMIN = 2
  541. ELSE
  542. NBMIN = 2
  543. END IF
  544. ELSE IF( C3.EQ.'TRI' ) THEN
  545. IF( SNAME ) THEN
  546. NBMIN = 2
  547. ELSE
  548. NBMIN = 2
  549. END IF
  550. ELSE IF( SUBNAM( 4: 7 ).EQ.'QP3RK' ) THEN
  551. IF( SNAME ) THEN
  552. NBMIN = 2
  553. ELSE
  554. NBMIN = 2
  555. END IF
  556. END IF
  557. ELSE IF( C2.EQ.'SY' ) THEN
  558. IF( C3.EQ.'TRF' ) THEN
  559. IF( SNAME ) THEN
  560. NBMIN = 8
  561. ELSE
  562. NBMIN = 8
  563. END IF
  564. ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  565. NBMIN = 2
  566. END IF
  567. ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  568. IF( C3.EQ.'TRD' ) THEN
  569. NBMIN = 2
  570. END IF
  571. ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  572. IF( C3( 1: 1 ).EQ.'G' ) THEN
  573. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  574. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  575. $ THEN
  576. NBMIN = 2
  577. END IF
  578. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  579. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  580. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  581. $ THEN
  582. NBMIN = 2
  583. END IF
  584. END IF
  585. ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  586. IF( C3( 1: 1 ).EQ.'G' ) THEN
  587. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  588. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  589. $ THEN
  590. NBMIN = 2
  591. END IF
  592. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  593. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  594. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  595. $ THEN
  596. NBMIN = 2
  597. END IF
  598. END IF
  599. ELSE IF( C2.EQ.'GG' ) THEN
  600. NBMIN = 2
  601. IF( C3.EQ.'HD3' ) THEN
  602. NBMIN = 2
  603. END IF
  604. END IF
  605. ILAENV = NBMIN
  606. RETURN
  607. *
  608. 70 CONTINUE
  609. *
  610. * ISPEC = 3: crossover point
  611. *
  612. NX = 0
  613. IF( C2.EQ.'GE' ) THEN
  614. IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  615. $ 'QLF' ) THEN
  616. IF( SNAME ) THEN
  617. NX = 128
  618. ELSE
  619. NX = 128
  620. END IF
  621. ELSE IF( C3.EQ.'HRD' ) THEN
  622. IF( SNAME ) THEN
  623. NX = 128
  624. ELSE
  625. NX = 128
  626. END IF
  627. ELSE IF( C3.EQ.'BRD' ) THEN
  628. IF( SNAME ) THEN
  629. NX = 128
  630. ELSE
  631. NX = 128
  632. END IF
  633. ELSE IF( SUBNAM( 4: 7 ).EQ.'QP3RK' ) THEN
  634. IF( SNAME ) THEN
  635. NX = 128
  636. ELSE
  637. NX = 128
  638. END IF
  639. END IF
  640. ELSE IF( C2.EQ.'SY' ) THEN
  641. IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  642. NX = 32
  643. END IF
  644. ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  645. IF( C3.EQ.'TRD' ) THEN
  646. NX = 32
  647. END IF
  648. ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  649. IF( C3( 1: 1 ).EQ.'G' ) THEN
  650. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  651. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  652. $ THEN
  653. NX = 128
  654. END IF
  655. END IF
  656. ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  657. IF( C3( 1: 1 ).EQ.'G' ) THEN
  658. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  659. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  660. $ THEN
  661. NX = 128
  662. END IF
  663. END IF
  664. ELSE IF( C2.EQ.'GG' ) THEN
  665. NX = 128
  666. IF( C3.EQ.'HD3' ) THEN
  667. NX = 128
  668. END IF
  669. END IF
  670. ILAENV = NX
  671. RETURN
  672. *
  673. 80 CONTINUE
  674. *
  675. * ISPEC = 4: number of shifts (used by xHSEQR)
  676. *
  677. ILAENV = 6
  678. RETURN
  679. *
  680. 90 CONTINUE
  681. *
  682. * ISPEC = 5: minimum column dimension (not used)
  683. *
  684. ILAENV = 2
  685. RETURN
  686. *
  687. 100 CONTINUE
  688. *
  689. * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
  690. *
  691. ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  692. RETURN
  693. *
  694. 110 CONTINUE
  695. *
  696. * ISPEC = 7: number of processors (not used)
  697. *
  698. ILAENV = 1
  699. RETURN
  700. *
  701. 120 CONTINUE
  702. *
  703. * ISPEC = 8: crossover point for multishift (used by xHSEQR)
  704. *
  705. ILAENV = 50
  706. RETURN
  707. *
  708. 130 CONTINUE
  709. *
  710. * ISPEC = 9: maximum size of the subproblems at the bottom of the
  711. * computation tree in the divide-and-conquer algorithm
  712. * (used by xGELSD and xGESDD)
  713. *
  714. ILAENV = 25
  715. RETURN
  716. *
  717. 140 CONTINUE
  718. *
  719. * ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap
  720. *
  721. * ILAENV = 0
  722. ILAENV = 1
  723. IF( ILAENV.EQ.1 ) THEN
  724. ILAENV = IEEECK( 1, 0.0, 1.0 )
  725. END IF
  726. RETURN
  727. *
  728. 150 CONTINUE
  729. *
  730. * ISPEC = 11: ieee infinity arithmetic can be trusted not to trap
  731. *
  732. * ILAENV = 0
  733. ILAENV = 1
  734. IF( ILAENV.EQ.1 ) THEN
  735. ILAENV = IEEECK( 0, 0.0, 1.0 )
  736. END IF
  737. RETURN
  738. *
  739. 160 CONTINUE
  740. *
  741. * 12 <= ISPEC <= 17: xHSEQR or related subroutines.
  742. *
  743. ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  744. RETURN
  745. *
  746. * End of ILAENV
  747. *
  748. END