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.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. *> \date November 2017
  123. *
  124. *> \ingroup aux_lin
  125. *
  126. *> \par Further Details:
  127. * =====================
  128. *>
  129. *> \verbatim
  130. *>
  131. *> The following conventions have been used when calling ILAENV from the
  132. *> LAPACK routines:
  133. *> 1) OPTS is a concatenation of all of the character options to
  134. *> subroutine NAME, in the same order that they appear in the
  135. *> argument list for NAME, even if they are not used in determining
  136. *> the value of the parameter specified by ISPEC.
  137. *> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
  138. *> that they appear in the argument list for NAME. N1 is used
  139. *> first, N2 second, and so on, and unused problem dimensions are
  140. *> passed a value of -1.
  141. *> 3) The parameter value returned by ILAENV is checked for validity in
  142. *> the calling subroutine. For example, ILAENV is used to retrieve
  143. *> the optimal blocksize for STRTRI as follows:
  144. *>
  145. *> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
  146. *> IF( NB.LE.1 ) NB = MAX( 1, N )
  147. *> \endverbatim
  148. *>
  149. * =====================================================================
  150. INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
  151. $ N4 )
  152. *
  153. * -- LAPACK test routine (version 3.8.0) --
  154. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  155. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  156. * November 2017
  157. *
  158. * .. Scalar Arguments ..
  159. CHARACTER*( * ) NAME, OPTS
  160. INTEGER ISPEC, N1, N2, N3, N4
  161. * ..
  162. *
  163. * =====================================================================
  164. *
  165. * .. Intrinsic Functions ..
  166. INTRINSIC INT, MIN, REAL
  167. * ..
  168. * .. External Functions ..
  169. INTEGER IEEECK
  170. EXTERNAL IEEECK
  171. * ..
  172. * .. Arrays in Common ..
  173. INTEGER IPARMS( 100 )
  174. * ..
  175. * .. Common blocks ..
  176. COMMON / CLAENV / IPARMS
  177. * ..
  178. * .. Save statement ..
  179. SAVE / CLAENV /
  180. * ..
  181. * .. Executable Statements ..
  182. *
  183. IF( ISPEC.GE.1 .AND. ISPEC.LE.5 ) THEN
  184. *
  185. * Return a value from the common block.
  186. *
  187. IF ( NAME(2:6).EQ.'GEQR ' ) THEN
  188. IF (N3.EQ.2) THEN
  189. ILAENV = IPARMS ( 2 )
  190. ELSE
  191. ILAENV = IPARMS ( 1 )
  192. END IF
  193. ELSE IF ( NAME(2:6).EQ.'GELQ ' ) THEN
  194. IF (N3.EQ.2) THEN
  195. ILAENV = IPARMS ( 2 )
  196. ELSE
  197. ILAENV = IPARMS ( 1 )
  198. END IF
  199. ELSE
  200. ILAENV = IPARMS( ISPEC )
  201. END IF
  202. *
  203. ELSE IF( ISPEC.EQ.6 ) THEN
  204. *
  205. * Compute SVD crossover point.
  206. *
  207. ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  208. *
  209. ELSE IF( ISPEC.GE.7 .AND. ISPEC.LE.9 ) THEN
  210. *
  211. * Return a value from the common block.
  212. *
  213. ILAENV = IPARMS( ISPEC )
  214. *
  215. ELSE IF( ISPEC.EQ.10 ) THEN
  216. *
  217. * IEEE NaN arithmetic can be trusted not to trap
  218. *
  219. C ILAENV = 0
  220. ILAENV = 1
  221. IF( ILAENV.EQ.1 ) THEN
  222. ILAENV = IEEECK( 1, 0.0, 1.0 )
  223. END IF
  224. *
  225. ELSE IF( ISPEC.EQ.11 ) THEN
  226. *
  227. * Infinity arithmetic can be trusted not to trap
  228. *
  229. C ILAENV = 0
  230. ILAENV = 1
  231. IF( ILAENV.EQ.1 ) THEN
  232. ILAENV = IEEECK( 0, 0.0, 1.0 )
  233. END IF
  234. *
  235. ELSE
  236. *
  237. * Invalid value for ISPEC
  238. *
  239. ILAENV = -1
  240. END IF
  241. *
  242. RETURN
  243. *
  244. * End of ILAENV
  245. *
  246. END
  247. INTEGER FUNCTION ILAENV2STAGE( ISPEC, NAME, OPTS, N1, N2,
  248. $ N3, N4 )
  249. * .. Scalar Arguments ..
  250. CHARACTER*( * ) NAME, OPTS
  251. INTEGER ISPEC, N1, N2, N3, N4
  252. * ..
  253. *
  254. * =====================================================================
  255. *
  256. * .. Local variables ..
  257. INTEGER IISPEC
  258. * .. External Functions ..
  259. INTEGER IPARAM2STAGE
  260. EXTERNAL IPARAM2STAGE
  261. * ..
  262. * .. Arrays in Common ..
  263. INTEGER IPARMS( 100 )
  264. * ..
  265. * .. Common blocks ..
  266. COMMON / CLAENV / IPARMS
  267. * ..
  268. * .. Save statement ..
  269. SAVE / CLAENV /
  270. * ..
  271. * .. Executable Statements ..
  272. *
  273. IF(( ISPEC.GE.1 ) .AND. (ISPEC.LE.5)) THEN
  274. *
  275. * 1 <= ISPEC <= 5: 2stage eigenvalues SVD routines.
  276. *
  277. IF( ISPEC.EQ.1 ) THEN
  278. ILAENV2STAGE = IPARMS( 1 )
  279. ELSE
  280. IISPEC = 16 + ISPEC
  281. ILAENV2STAGE = IPARAM2STAGE( IISPEC, NAME, OPTS,
  282. $ N1, N2, N3, N4 )
  283. ENDIF
  284. *
  285. ELSE
  286. *
  287. * Invalid value for ISPEC
  288. *
  289. ILAENV2STAGE = -1
  290. END IF
  291. *
  292. RETURN
  293. END