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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. *> \brief \b ILAENV
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
  12. * N4 )
  13. *
  14. * .. Scalar Arguments ..
  15. * CHARACTER*( * ) NAME, OPTS
  16. * INTEGER ISPEC, N1, N2, N3, N4
  17. * ..
  18. *
  19. *
  20. *> \par Purpose:
  21. * =============
  22. *>
  23. *> \verbatim
  24. *>
  25. *> ILAENV returns problem-dependent parameters for the local
  26. *> environment. See ISPEC for a description of the parameters.
  27. *>
  28. *> In this version, the problem-dependent parameters are contained in
  29. *> the integer array IPARMS in the common block CLAENV and the value
  30. *> with index ISPEC is copied to ILAENV. This version of ILAENV is
  31. *> to be used in conjunction with XLAENV in TESTING and TIMING.
  32. *> \endverbatim
  33. *
  34. * Arguments:
  35. * ==========
  36. *
  37. *> \param[in] ISPEC
  38. *> \verbatim
  39. *> ISPEC is INTEGER
  40. *> Specifies the parameter to be returned as the value of
  41. *> ILAENV.
  42. *> = 1: the optimal blocksize; if this value is 1, an unblocked
  43. *> algorithm will give the best performance.
  44. *> = 2: the minimum block size for which the block routine
  45. *> should be used; if the usable block size is less than
  46. *> this value, an unblocked routine should be used.
  47. *> = 3: the crossover point (in a block routine, for N less
  48. *> than this value, an unblocked routine should be used)
  49. *> = 4: the number of shifts, used in the nonsymmetric
  50. *> eigenvalue routines
  51. *> = 5: the minimum column dimension for blocking to be used;
  52. *> rectangular blocks must have dimension at least k by m,
  53. *> where k is given by ILAENV(2,...) and m by ILAENV(5,...)
  54. *> = 6: the crossover point for the SVD (when reducing an m by n
  55. *> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
  56. *> this value, a QR factorization is used first to reduce
  57. *> the matrix to a triangular form.)
  58. *> = 7: the number of processors
  59. *> = 8: the crossover point for the multishift QR and QZ methods
  60. *> for nonsymmetric eigenvalue problems.
  61. *> = 9: maximum size of the subproblems at the bottom of the
  62. *> computation tree in the divide-and-conquer algorithm
  63. *> =10: ieee NaN arithmetic can be trusted not to trap
  64. *> =11: infinity arithmetic can be trusted not to trap
  65. *>
  66. *> Other specifications (up to 100) can be added later.
  67. *> \endverbatim
  68. *>
  69. *> \param[in] NAME
  70. *> \verbatim
  71. *> NAME is CHARACTER*(*)
  72. *> The name of the calling subroutine.
  73. *> \endverbatim
  74. *>
  75. *> \param[in] OPTS
  76. *> \verbatim
  77. *> OPTS is CHARACTER*(*)
  78. *> The character options to the subroutine NAME, concatenated
  79. *> into a single character string. For example, UPLO = 'U',
  80. *> TRANS = 'T', and DIAG = 'N' for a triangular routine would
  81. *> be specified as OPTS = 'UTN'.
  82. *> \endverbatim
  83. *>
  84. *> \param[in] N1
  85. *> \verbatim
  86. *> N1 is INTEGER
  87. *> \endverbatim
  88. *>
  89. *> \param[in] N2
  90. *> \verbatim
  91. *> N2 is INTEGER
  92. *> \endverbatim
  93. *>
  94. *> \param[in] N3
  95. *> \verbatim
  96. *> N3 is INTEGER
  97. *> \endverbatim
  98. *>
  99. *> \param[in] N4
  100. *> \verbatim
  101. *> N4 is INTEGER
  102. *>
  103. *> Problem dimensions for the subroutine NAME; these may not all
  104. *> be required.
  105. *> \endverbatim
  106. *>
  107. *> \return ILAENV
  108. *> \verbatim
  109. *> ILAENV is INTEGER
  110. *> >= 0: the value of the parameter specified by ISPEC
  111. *> < 0: if ILAENV = -k, the k-th argument had an illegal value.
  112. *> \endverbatim
  113. *
  114. * Authors:
  115. * ========
  116. *
  117. *> \author Univ. of Tennessee
  118. *> \author Univ. of California Berkeley
  119. *> \author Univ. of Colorado Denver
  120. *> \author NAG Ltd.
  121. *
  122. *> \ingroup aux_lin
  123. *
  124. *> \par Further Details:
  125. * =====================
  126. *>
  127. *> \verbatim
  128. *>
  129. *> The following conventions have been used when calling ILAENV from the
  130. *> LAPACK routines:
  131. *> 1) OPTS is a concatenation of all of the character options to
  132. *> subroutine NAME, in the same order that they appear in the
  133. *> argument list for NAME, even if they are not used in determining
  134. *> the value of the parameter specified by ISPEC.
  135. *> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
  136. *> that they appear in the argument list for NAME. N1 is used
  137. *> first, N2 second, and so on, and unused problem dimensions are
  138. *> passed a value of -1.
  139. *> 3) The parameter value returned by ILAENV is checked for validity in
  140. *> the calling subroutine. For example, ILAENV is used to retrieve
  141. *> the optimal blocksize for STRTRI as follows:
  142. *>
  143. *> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
  144. *> IF( NB.LE.1 ) NB = MAX( 1, N )
  145. *> \endverbatim
  146. *>
  147. * =====================================================================
  148. INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
  149. $ N4 )
  150. *
  151. * -- LAPACK test routine --
  152. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  153. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  154. *
  155. * .. Scalar Arguments ..
  156. CHARACTER*( * ) NAME, OPTS
  157. INTEGER ISPEC, N1, N2, N3, N4
  158. * ..
  159. *
  160. * =====================================================================
  161. *
  162. * .. Intrinsic Functions ..
  163. INTRINSIC INT, MIN, REAL
  164. * ..
  165. * .. External Functions ..
  166. INTEGER IEEECK
  167. EXTERNAL IEEECK
  168. * ..
  169. * .. Arrays in Common ..
  170. INTEGER IPARMS( 100 )
  171. * ..
  172. * .. Common blocks ..
  173. COMMON / CLAENV / IPARMS
  174. * ..
  175. * .. Save statement ..
  176. SAVE / CLAENV /
  177. * ..
  178. * .. Executable Statements ..
  179. *
  180. IF( ISPEC.GE.1 .AND. ISPEC.LE.5 ) THEN
  181. *
  182. * Return a value from the common block.
  183. *
  184. IF ( NAME(2:6).EQ.'GEQR ' ) THEN
  185. IF (N3.EQ.2) THEN
  186. ILAENV = IPARMS ( 2 )
  187. ELSE
  188. ILAENV = IPARMS ( 1 )
  189. END IF
  190. ELSE IF ( NAME(2:6).EQ.'GELQ ' ) THEN
  191. IF (N3.EQ.2) THEN
  192. ILAENV = IPARMS ( 2 )
  193. ELSE
  194. ILAENV = IPARMS ( 1 )
  195. END IF
  196. ELSE
  197. ILAENV = IPARMS( ISPEC )
  198. END IF
  199. *
  200. ELSE IF( ISPEC.EQ.6 ) THEN
  201. *
  202. * Compute SVD crossover point.
  203. *
  204. ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  205. *
  206. ELSE IF( ISPEC.GE.7 .AND. ISPEC.LE.9 ) THEN
  207. *
  208. * Return a value from the common block.
  209. *
  210. ILAENV = IPARMS( ISPEC )
  211. *
  212. ELSE IF( ISPEC.EQ.10 ) THEN
  213. *
  214. * IEEE NaN arithmetic can be trusted not to trap
  215. *
  216. C ILAENV = 0
  217. ILAENV = 1
  218. IF( ILAENV.EQ.1 ) THEN
  219. ILAENV = IEEECK( 1, 0.0, 1.0 )
  220. END IF
  221. *
  222. ELSE IF( ISPEC.EQ.11 ) THEN
  223. *
  224. * Infinity arithmetic can be trusted not to trap
  225. *
  226. C ILAENV = 0
  227. ILAENV = 1
  228. IF( ILAENV.EQ.1 ) THEN
  229. ILAENV = IEEECK( 0, 0.0, 1.0 )
  230. END IF
  231. *
  232. ELSE
  233. *
  234. * Invalid value for ISPEC
  235. *
  236. ILAENV = -1
  237. END IF
  238. *
  239. RETURN
  240. *
  241. * End of ILAENV
  242. *
  243. END
  244. INTEGER FUNCTION ILAENV2STAGE( ISPEC, NAME, OPTS, N1, N2,
  245. $ N3, N4 )
  246. * .. Scalar Arguments ..
  247. CHARACTER*( * ) NAME, OPTS
  248. INTEGER ISPEC, N1, N2, N3, N4
  249. * ..
  250. *
  251. * =====================================================================
  252. *
  253. * .. Local variables ..
  254. INTEGER IISPEC
  255. * .. External Functions ..
  256. INTEGER IPARAM2STAGE
  257. EXTERNAL IPARAM2STAGE
  258. * ..
  259. * .. Arrays in Common ..
  260. INTEGER IPARMS( 100 )
  261. * ..
  262. * .. Common blocks ..
  263. COMMON / CLAENV / IPARMS
  264. * ..
  265. * .. Save statement ..
  266. SAVE / CLAENV /
  267. * ..
  268. * .. Executable Statements ..
  269. *
  270. IF(( ISPEC.GE.1 ) .AND. (ISPEC.LE.5)) THEN
  271. *
  272. * 1 <= ISPEC <= 5: 2stage eigenvalues SVD routines.
  273. *
  274. IF( ISPEC.EQ.1 ) THEN
  275. ILAENV2STAGE = IPARMS( 1 )
  276. ELSE
  277. IISPEC = 16 + ISPEC
  278. ILAENV2STAGE = IPARAM2STAGE( IISPEC, NAME, OPTS,
  279. $ N1, N2, N3, N4 )
  280. ENDIF
  281. *
  282. ELSE
  283. *
  284. * Invalid value for ISPEC
  285. *
  286. ILAENV2STAGE = -1
  287. END IF
  288. *
  289. RETURN
  290. END