LAPACK  3.10.1
LAPACK: Linear Algebra PACKage
ilaenv.f
Go to the documentation of this file.
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
integer function ilaenv2stage(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV2STAGE
Definition: ilaenv2stage.f:149
integer function ieeeck(ISPEC, ZERO, ONE)
IEEECK
Definition: ieeeck.f:82
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: ilaenv.f:162
integer function iparam2stage(ISPEC, NAME, OPTS, NI, NBI, IBI, NXI)
IPARAM2STAGE
Definition: iparam2stage.F:155