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 19 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  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 NaN arithmetic can be trusted not to trap
  83. *> =11: infinity arithmetic can be trusted not to trap
  84. *> 12 <= ISPEC <= 16:
  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. *> \date November 2015
  136. *
  137. *> \ingroup auxOTHERauxiliary
  138. *
  139. *> \par Further Details:
  140. * =====================
  141. *>
  142. *> \verbatim
  143. *>
  144. *> The following conventions have been used when calling ILAENV from the
  145. *> LAPACK routines:
  146. *> 1) OPTS is a concatenation of all of the character options to
  147. *> subroutine NAME, in the same order that they appear in the
  148. *> argument list for NAME, even if they are not used in determining
  149. *> the value of the parameter specified by ISPEC.
  150. *> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
  151. *> that they appear in the argument list for NAME. N1 is used
  152. *> first, N2 second, and so on, and unused problem dimensions are
  153. *> passed a value of -1.
  154. *> 3) The parameter value returned by ILAENV is checked for validity in
  155. *> the calling subroutine. For example, ILAENV is used to retrieve
  156. *> the optimal blocksize for STRTRI as follows:
  157. *>
  158. *> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
  159. *> IF( NB.LE.1 ) NB = MAX( 1, N )
  160. *> \endverbatim
  161. *>
  162. * =====================================================================
  163. INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  164. *
  165. * -- LAPACK auxiliary routine (version 3.6.0) --
  166. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  167. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  168. * November 2015
  169. *
  170. * .. Scalar Arguments ..
  171. CHARACTER*( * ) NAME, OPTS
  172. INTEGER ISPEC, N1, N2, N3, N4
  173. * ..
  174. *
  175. * =====================================================================
  176. *
  177. * .. Local Scalars ..
  178. INTEGER I, IC, IZ, NB, NBMIN, NX
  179. LOGICAL CNAME, SNAME
  180. CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6
  181. * ..
  182. * .. Intrinsic Functions ..
  183. INTRINSIC CHAR, ICHAR, INT, MIN, REAL
  184. * ..
  185. * .. External Functions ..
  186. INTEGER IEEECK, IPARMQ
  187. EXTERNAL IEEECK, IPARMQ
  188. * ..
  189. * .. Executable Statements ..
  190. *
  191. GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
  192. $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC
  193. *
  194. * Invalid value for ISPEC
  195. *
  196. ILAENV = -1
  197. RETURN
  198. *
  199. 10 CONTINUE
  200. *
  201. * Convert NAME to upper case if the first character is lower case.
  202. *
  203. ILAENV = 1
  204. SUBNAM = NAME
  205. IC = ICHAR( SUBNAM( 1: 1 ) )
  206. IZ = ICHAR( 'Z' )
  207. IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
  208. *
  209. * ASCII character set
  210. *
  211. IF( IC.GE.97 .AND. IC.LE.122 ) THEN
  212. SUBNAM( 1: 1 ) = CHAR( IC-32 )
  213. DO 20 I = 2, 6
  214. IC = ICHAR( SUBNAM( I: I ) )
  215. IF( IC.GE.97 .AND. IC.LE.122 )
  216. $ SUBNAM( I: I ) = CHAR( IC-32 )
  217. 20 CONTINUE
  218. END IF
  219. *
  220. ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
  221. *
  222. * EBCDIC character set
  223. *
  224. IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  225. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  226. $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
  227. SUBNAM( 1: 1 ) = CHAR( IC+64 )
  228. DO 30 I = 2, 6
  229. IC = ICHAR( SUBNAM( I: I ) )
  230. IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  231. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  232. $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
  233. $ I ) = CHAR( IC+64 )
  234. 30 CONTINUE
  235. END IF
  236. *
  237. ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
  238. *
  239. * Prime machines: ASCII+128
  240. *
  241. IF( IC.GE.225 .AND. IC.LE.250 ) THEN
  242. SUBNAM( 1: 1 ) = CHAR( IC-32 )
  243. DO 40 I = 2, 6
  244. IC = ICHAR( SUBNAM( I: I ) )
  245. IF( IC.GE.225 .AND. IC.LE.250 )
  246. $ SUBNAM( I: I ) = CHAR( IC-32 )
  247. 40 CONTINUE
  248. END IF
  249. END IF
  250. *
  251. C1 = SUBNAM( 1: 1 )
  252. SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
  253. CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
  254. IF( .NOT.( CNAME .OR. SNAME ) )
  255. $ RETURN
  256. C2 = SUBNAM( 2: 3 )
  257. C3 = SUBNAM( 4: 6 )
  258. C4 = C3( 2: 3 )
  259. *
  260. GO TO ( 50, 60, 70 )ISPEC
  261. *
  262. 50 CONTINUE
  263. *
  264. * ISPEC = 1: block size
  265. *
  266. * In these examples, separate code is provided for setting NB for
  267. * real and complex. We assume that NB will take the same value in
  268. * single or double precision.
  269. *
  270. NB = 1
  271. *
  272. IF( C2.EQ.'GE' ) THEN
  273. IF( C3.EQ.'TRF' ) THEN
  274. IF( SNAME ) THEN
  275. NB = 64
  276. ELSE
  277. NB = 64
  278. END IF
  279. ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
  280. $ C3.EQ.'QLF' ) THEN
  281. IF( SNAME ) THEN
  282. NB = 32
  283. ELSE
  284. NB = 32
  285. END IF
  286. ELSE IF( C3.EQ.'HRD' ) THEN
  287. IF( SNAME ) THEN
  288. NB = 32
  289. ELSE
  290. NB = 32
  291. END IF
  292. ELSE IF( C3.EQ.'BRD' ) THEN
  293. IF( SNAME ) THEN
  294. NB = 32
  295. ELSE
  296. NB = 32
  297. END IF
  298. ELSE IF( C3.EQ.'TRI' ) THEN
  299. IF( SNAME ) THEN
  300. NB = 64
  301. ELSE
  302. NB = 64
  303. END IF
  304. END IF
  305. ELSE IF( C2.EQ.'PO' ) THEN
  306. IF( C3.EQ.'TRF' ) THEN
  307. IF( SNAME ) THEN
  308. NB = 64
  309. ELSE
  310. NB = 64
  311. END IF
  312. END IF
  313. ELSE IF( C2.EQ.'SY' ) THEN
  314. IF( C3.EQ.'TRF' ) THEN
  315. IF( SNAME ) THEN
  316. NB = 64
  317. ELSE
  318. NB = 64
  319. END IF
  320. ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  321. NB = 32
  322. ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
  323. NB = 64
  324. END IF
  325. ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  326. IF( C3.EQ.'TRF' ) THEN
  327. NB = 64
  328. ELSE IF( C3.EQ.'TRD' ) THEN
  329. NB = 32
  330. ELSE IF( C3.EQ.'GST' ) THEN
  331. NB = 64
  332. END IF
  333. ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  334. IF( C3( 1: 1 ).EQ.'G' ) THEN
  335. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  336. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  337. $ THEN
  338. NB = 32
  339. END IF
  340. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  341. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  342. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  343. $ THEN
  344. NB = 32
  345. END IF
  346. END IF
  347. ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  348. IF( C3( 1: 1 ).EQ.'G' ) THEN
  349. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  350. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  351. $ THEN
  352. NB = 32
  353. END IF
  354. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  355. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  356. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  357. $ THEN
  358. NB = 32
  359. END IF
  360. END IF
  361. ELSE IF( C2.EQ.'GB' ) THEN
  362. IF( C3.EQ.'TRF' ) THEN
  363. IF( SNAME ) THEN
  364. IF( N4.LE.64 ) THEN
  365. NB = 1
  366. ELSE
  367. NB = 32
  368. END IF
  369. ELSE
  370. IF( N4.LE.64 ) THEN
  371. NB = 1
  372. ELSE
  373. NB = 32
  374. END IF
  375. END IF
  376. END IF
  377. ELSE IF( C2.EQ.'PB' ) THEN
  378. IF( C3.EQ.'TRF' ) THEN
  379. IF( SNAME ) THEN
  380. IF( N2.LE.64 ) THEN
  381. NB = 1
  382. ELSE
  383. NB = 32
  384. END IF
  385. ELSE
  386. IF( N2.LE.64 ) THEN
  387. NB = 1
  388. ELSE
  389. NB = 32
  390. END IF
  391. END IF
  392. END IF
  393. ELSE IF( C2.EQ.'TR' ) THEN
  394. IF( C3.EQ.'TRI' ) THEN
  395. IF( SNAME ) THEN
  396. NB = 64
  397. ELSE
  398. NB = 64
  399. END IF
  400. END IF
  401. ELSE IF( C2.EQ.'LA' ) THEN
  402. IF( C3.EQ.'UUM' ) THEN
  403. IF( SNAME ) THEN
  404. NB = 64
  405. ELSE
  406. NB = 64
  407. END IF
  408. END IF
  409. ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
  410. IF( C3.EQ.'EBZ' ) THEN
  411. NB = 1
  412. END IF
  413. ELSE IF( C2.EQ.'GG' ) THEN
  414. NB = 32
  415. IF( C3.EQ.'HD3' ) THEN
  416. IF( SNAME ) THEN
  417. NB = 32
  418. ELSE
  419. NB = 32
  420. END IF
  421. END IF
  422. END IF
  423. ILAENV = NB
  424. RETURN
  425. *
  426. 60 CONTINUE
  427. *
  428. * ISPEC = 2: minimum block size
  429. *
  430. NBMIN = 2
  431. IF( C2.EQ.'GE' ) THEN
  432. IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  433. $ 'QLF' ) THEN
  434. IF( SNAME ) THEN
  435. NBMIN = 2
  436. ELSE
  437. NBMIN = 2
  438. END IF
  439. ELSE IF( C3.EQ.'HRD' ) THEN
  440. IF( SNAME ) THEN
  441. NBMIN = 2
  442. ELSE
  443. NBMIN = 2
  444. END IF
  445. ELSE IF( C3.EQ.'BRD' ) THEN
  446. IF( SNAME ) THEN
  447. NBMIN = 2
  448. ELSE
  449. NBMIN = 2
  450. END IF
  451. ELSE IF( C3.EQ.'TRI' ) THEN
  452. IF( SNAME ) THEN
  453. NBMIN = 2
  454. ELSE
  455. NBMIN = 2
  456. END IF
  457. END IF
  458. ELSE IF( C2.EQ.'SY' ) THEN
  459. IF( C3.EQ.'TRF' ) THEN
  460. IF( SNAME ) THEN
  461. NBMIN = 8
  462. ELSE
  463. NBMIN = 8
  464. END IF
  465. ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  466. NBMIN = 2
  467. END IF
  468. ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  469. IF( C3.EQ.'TRD' ) THEN
  470. NBMIN = 2
  471. END IF
  472. ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  473. IF( C3( 1: 1 ).EQ.'G' ) THEN
  474. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  475. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  476. $ THEN
  477. NBMIN = 2
  478. END IF
  479. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  480. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  481. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  482. $ THEN
  483. NBMIN = 2
  484. END IF
  485. END IF
  486. ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  487. IF( C3( 1: 1 ).EQ.'G' ) THEN
  488. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  489. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  490. $ THEN
  491. NBMIN = 2
  492. END IF
  493. ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  494. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  495. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  496. $ THEN
  497. NBMIN = 2
  498. END IF
  499. END IF
  500. ELSE IF( C2.EQ.'GG' ) THEN
  501. NBMIN = 2
  502. IF( C3.EQ.'HD3' ) THEN
  503. NBMIN = 2
  504. END IF
  505. END IF
  506. ILAENV = NBMIN
  507. RETURN
  508. *
  509. 70 CONTINUE
  510. *
  511. * ISPEC = 3: crossover point
  512. *
  513. NX = 0
  514. IF( C2.EQ.'GE' ) THEN
  515. IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  516. $ 'QLF' ) THEN
  517. IF( SNAME ) THEN
  518. NX = 128
  519. ELSE
  520. NX = 128
  521. END IF
  522. ELSE IF( C3.EQ.'HRD' ) THEN
  523. IF( SNAME ) THEN
  524. NX = 128
  525. ELSE
  526. NX = 128
  527. END IF
  528. ELSE IF( C3.EQ.'BRD' ) THEN
  529. IF( SNAME ) THEN
  530. NX = 128
  531. ELSE
  532. NX = 128
  533. END IF
  534. END IF
  535. ELSE IF( C2.EQ.'SY' ) THEN
  536. IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  537. NX = 32
  538. END IF
  539. ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  540. IF( C3.EQ.'TRD' ) THEN
  541. NX = 32
  542. END IF
  543. ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  544. IF( C3( 1: 1 ).EQ.'G' ) THEN
  545. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  546. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  547. $ THEN
  548. NX = 128
  549. END IF
  550. END IF
  551. ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  552. IF( C3( 1: 1 ).EQ.'G' ) THEN
  553. IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  554. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  555. $ THEN
  556. NX = 128
  557. END IF
  558. END IF
  559. ELSE IF( C2.EQ.'GG' ) THEN
  560. NX = 128
  561. IF( C3.EQ.'HD3' ) THEN
  562. NX = 128
  563. END IF
  564. END IF
  565. ILAENV = NX
  566. RETURN
  567. *
  568. 80 CONTINUE
  569. *
  570. * ISPEC = 4: number of shifts (used by xHSEQR)
  571. *
  572. ILAENV = 6
  573. RETURN
  574. *
  575. 90 CONTINUE
  576. *
  577. * ISPEC = 5: minimum column dimension (not used)
  578. *
  579. ILAENV = 2
  580. RETURN
  581. *
  582. 100 CONTINUE
  583. *
  584. * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
  585. *
  586. ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  587. RETURN
  588. *
  589. 110 CONTINUE
  590. *
  591. * ISPEC = 7: number of processors (not used)
  592. *
  593. ILAENV = 1
  594. RETURN
  595. *
  596. 120 CONTINUE
  597. *
  598. * ISPEC = 8: crossover point for multishift (used by xHSEQR)
  599. *
  600. ILAENV = 50
  601. RETURN
  602. *
  603. 130 CONTINUE
  604. *
  605. * ISPEC = 9: maximum size of the subproblems at the bottom of the
  606. * computation tree in the divide-and-conquer algorithm
  607. * (used by xGELSD and xGESDD)
  608. *
  609. ILAENV = 25
  610. RETURN
  611. *
  612. 140 CONTINUE
  613. *
  614. * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
  615. *
  616. * ILAENV = 0
  617. ILAENV = 1
  618. IF( ILAENV.EQ.1 ) THEN
  619. ILAENV = IEEECK( 1, 0.0, 1.0 )
  620. END IF
  621. RETURN
  622. *
  623. 150 CONTINUE
  624. *
  625. * ISPEC = 11: infinity arithmetic can be trusted not to trap
  626. *
  627. * ILAENV = 0
  628. ILAENV = 1
  629. IF( ILAENV.EQ.1 ) THEN
  630. ILAENV = IEEECK( 0, 0.0, 1.0 )
  631. END IF
  632. RETURN
  633. *
  634. 160 CONTINUE
  635. *
  636. * 12 <= ISPEC <= 16: xHSEQR or related subroutines.
  637. *
  638. ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  639. RETURN
  640. *
  641. * End of ILAENV
  642. *
  643. END