root / src / lapack / util / ilaenv.f @ 6
Historique | Voir | Annoter | Télécharger (16,36 ko)
1 |
INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) |
---|---|
2 |
* |
3 |
* -- LAPACK auxiliary routine (version 3.2.1) -- |
4 |
* |
5 |
* -- April 2009 -- |
6 |
* |
7 |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
8 |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
9 |
* |
10 |
* .. Scalar Arguments .. |
11 |
CHARACTER*( * ) NAME, OPTS |
12 |
INTEGER ISPEC, N1, N2, N3, N4 |
13 |
* .. |
14 |
* |
15 |
* Purpose |
16 |
* ======= |
17 |
* |
18 |
* ILAENV is called from the LAPACK routines to choose problem-dependent |
19 |
* parameters for the local environment. See ISPEC for a description of |
20 |
* the parameters. |
21 |
* |
22 |
* ILAENV returns an INTEGER |
23 |
* if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC |
24 |
* if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. |
25 |
* |
26 |
* This version provides a set of parameters which should give good, |
27 |
* but not optimal, performance on many of the currently available |
28 |
* computers. Users are encouraged to modify this subroutine to set |
29 |
* the tuning parameters for their particular machine using the option |
30 |
* and problem size information in the arguments. |
31 |
* |
32 |
* This routine will not function correctly if it is converted to all |
33 |
* lower case. Converting it to all upper case is allowed. |
34 |
* |
35 |
* Arguments |
36 |
* ========= |
37 |
* |
38 |
* ISPEC (input) INTEGER |
39 |
* Specifies the parameter to be returned as the value of |
40 |
* ILAENV. |
41 |
* = 1: the optimal blocksize; if this value is 1, an unblocked |
42 |
* algorithm will give the best performance. |
43 |
* = 2: the minimum block size for which the block routine |
44 |
* should be used; if the usable block size is less than |
45 |
* this value, an unblocked routine should be used. |
46 |
* = 3: the crossover point (in a block routine, for N less |
47 |
* than this value, an unblocked routine should be used) |
48 |
* = 4: the number of shifts, used in the nonsymmetric |
49 |
* eigenvalue routines (DEPRECATED) |
50 |
* = 5: the minimum column dimension for blocking to be used; |
51 |
* rectangular blocks must have dimension at least k by m, |
52 |
* where k is given by ILAENV(2,...) and m by ILAENV(5,...) |
53 |
* = 6: the crossover point for the SVD (when reducing an m by n |
54 |
* matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds |
55 |
* this value, a QR factorization is used first to reduce |
56 |
* the matrix to a triangular form.) |
57 |
* = 7: the number of processors |
58 |
* = 8: the crossover point for the multishift QR method |
59 |
* for nonsymmetric eigenvalue problems (DEPRECATED) |
60 |
* = 9: maximum size of the subproblems at the bottom of the |
61 |
* computation tree in the divide-and-conquer algorithm |
62 |
* (used by xGELSD and xGESDD) |
63 |
* =10: ieee NaN arithmetic can be trusted not to trap |
64 |
* =11: infinity arithmetic can be trusted not to trap |
65 |
* 12 <= ISPEC <= 16: |
66 |
* xHSEQR or one of its subroutines, |
67 |
* see IPARMQ for detailed explanation |
68 |
* |
69 |
* NAME (input) CHARACTER*(*) |
70 |
* The name of the calling subroutine, in either upper case or |
71 |
* lower case. |
72 |
* |
73 |
* OPTS (input) CHARACTER*(*) |
74 |
* The character options to the subroutine NAME, concatenated |
75 |
* into a single character string. For example, UPLO = 'U', |
76 |
* TRANS = 'T', and DIAG = 'N' for a triangular routine would |
77 |
* be specified as OPTS = 'UTN'. |
78 |
* |
79 |
* N1 (input) INTEGER |
80 |
* N2 (input) INTEGER |
81 |
* N3 (input) INTEGER |
82 |
* N4 (input) INTEGER |
83 |
* Problem dimensions for the subroutine NAME; these may not all |
84 |
* be required. |
85 |
* |
86 |
* Further Details |
87 |
* =============== |
88 |
* |
89 |
* The following conventions have been used when calling ILAENV from the |
90 |
* LAPACK routines: |
91 |
* 1) OPTS is a concatenation of all of the character options to |
92 |
* subroutine NAME, in the same order that they appear in the |
93 |
* argument list for NAME, even if they are not used in determining |
94 |
* the value of the parameter specified by ISPEC. |
95 |
* 2) The problem dimensions N1, N2, N3, N4 are specified in the order |
96 |
* that they appear in the argument list for NAME. N1 is used |
97 |
* first, N2 second, and so on, and unused problem dimensions are |
98 |
* passed a value of -1. |
99 |
* 3) The parameter value returned by ILAENV is checked for validity in |
100 |
* the calling subroutine. For example, ILAENV is used to retrieve |
101 |
* the optimal blocksize for STRTRI as follows: |
102 |
* |
103 |
* NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) |
104 |
* IF( NB.LE.1 ) NB = MAX( 1, N ) |
105 |
* |
106 |
* ===================================================================== |
107 |
* |
108 |
* .. Local Scalars .. |
109 |
INTEGER I, IC, IZ, NB, NBMIN, NX |
110 |
LOGICAL CNAME, SNAME |
111 |
CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 |
112 |
* .. |
113 |
* .. Intrinsic Functions .. |
114 |
INTRINSIC CHAR, ICHAR, INT, MIN, REAL |
115 |
* .. |
116 |
* .. External Functions .. |
117 |
INTEGER IEEECK, IPARMQ |
118 |
EXTERNAL IEEECK, IPARMQ |
119 |
* .. |
120 |
* .. Executable Statements .. |
121 |
* |
122 |
GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, |
123 |
$ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC |
124 |
* |
125 |
* Invalid value for ISPEC |
126 |
* |
127 |
ILAENV = -1 |
128 |
RETURN |
129 |
* |
130 |
10 CONTINUE |
131 |
* |
132 |
* Convert NAME to upper case if the first character is lower case. |
133 |
* |
134 |
ILAENV = 1 |
135 |
SUBNAM = NAME |
136 |
IC = ICHAR( SUBNAM( 1: 1 ) ) |
137 |
IZ = ICHAR( 'Z' ) |
138 |
IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN |
139 |
* |
140 |
* ASCII character set |
141 |
* |
142 |
IF( IC.GE.97 .AND. IC.LE.122 ) THEN |
143 |
SUBNAM( 1: 1 ) = CHAR( IC-32 ) |
144 |
DO 20 I = 2, 6 |
145 |
IC = ICHAR( SUBNAM( I: I ) ) |
146 |
IF( IC.GE.97 .AND. IC.LE.122 ) |
147 |
$ SUBNAM( I: I ) = CHAR( IC-32 ) |
148 |
20 CONTINUE |
149 |
END IF |
150 |
* |
151 |
ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN |
152 |
* |
153 |
* EBCDIC character set |
154 |
* |
155 |
IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. |
156 |
$ ( IC.GE.145 .AND. IC.LE.153 ) .OR. |
157 |
$ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN |
158 |
SUBNAM( 1: 1 ) = CHAR( IC+64 ) |
159 |
DO 30 I = 2, 6 |
160 |
IC = ICHAR( SUBNAM( I: I ) ) |
161 |
IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. |
162 |
$ ( IC.GE.145 .AND. IC.LE.153 ) .OR. |
163 |
$ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: |
164 |
$ I ) = CHAR( IC+64 ) |
165 |
30 CONTINUE |
166 |
END IF |
167 |
* |
168 |
ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN |
169 |
* |
170 |
* Prime machines: ASCII+128 |
171 |
* |
172 |
IF( IC.GE.225 .AND. IC.LE.250 ) THEN |
173 |
SUBNAM( 1: 1 ) = CHAR( IC-32 ) |
174 |
DO 40 I = 2, 6 |
175 |
IC = ICHAR( SUBNAM( I: I ) ) |
176 |
IF( IC.GE.225 .AND. IC.LE.250 ) |
177 |
$ SUBNAM( I: I ) = CHAR( IC-32 ) |
178 |
40 CONTINUE |
179 |
END IF |
180 |
END IF |
181 |
* |
182 |
C1 = SUBNAM( 1: 1 ) |
183 |
SNAME = C1.EQ.'S' .OR. C1.EQ.'D' |
184 |
CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' |
185 |
IF( .NOT.( CNAME .OR. SNAME ) ) |
186 |
$ RETURN |
187 |
C2 = SUBNAM( 2: 3 ) |
188 |
C3 = SUBNAM( 4: 6 ) |
189 |
C4 = C3( 2: 3 ) |
190 |
* |
191 |
GO TO ( 50, 60, 70 )ISPEC |
192 |
* |
193 |
50 CONTINUE |
194 |
* |
195 |
* ISPEC = 1: block size |
196 |
* |
197 |
* In these examples, separate code is provided for setting NB for |
198 |
* real and complex. We assume that NB will take the same value in |
199 |
* single or double precision. |
200 |
* |
201 |
NB = 1 |
202 |
* |
203 |
IF( C2.EQ.'GE' ) THEN |
204 |
IF( C3.EQ.'TRF' ) THEN |
205 |
IF( SNAME ) THEN |
206 |
NB = 64 |
207 |
ELSE |
208 |
NB = 64 |
209 |
END IF |
210 |
ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. |
211 |
$ C3.EQ.'QLF' ) THEN |
212 |
IF( SNAME ) THEN |
213 |
NB = 32 |
214 |
ELSE |
215 |
NB = 32 |
216 |
END IF |
217 |
ELSE IF( C3.EQ.'HRD' ) THEN |
218 |
IF( SNAME ) THEN |
219 |
NB = 32 |
220 |
ELSE |
221 |
NB = 32 |
222 |
END IF |
223 |
ELSE IF( C3.EQ.'BRD' ) THEN |
224 |
IF( SNAME ) THEN |
225 |
NB = 32 |
226 |
ELSE |
227 |
NB = 32 |
228 |
END IF |
229 |
ELSE IF( C3.EQ.'TRI' ) THEN |
230 |
IF( SNAME ) THEN |
231 |
NB = 64 |
232 |
ELSE |
233 |
NB = 64 |
234 |
END IF |
235 |
END IF |
236 |
ELSE IF( C2.EQ.'PO' ) THEN |
237 |
IF( C3.EQ.'TRF' ) THEN |
238 |
IF( SNAME ) THEN |
239 |
NB = 64 |
240 |
ELSE |
241 |
NB = 64 |
242 |
END IF |
243 |
END IF |
244 |
ELSE IF( C2.EQ.'SY' ) THEN |
245 |
IF( C3.EQ.'TRF' ) THEN |
246 |
IF( SNAME ) THEN |
247 |
NB = 64 |
248 |
ELSE |
249 |
NB = 64 |
250 |
END IF |
251 |
ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN |
252 |
NB = 32 |
253 |
ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN |
254 |
NB = 64 |
255 |
END IF |
256 |
ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
257 |
IF( C3.EQ.'TRF' ) THEN |
258 |
NB = 64 |
259 |
ELSE IF( C3.EQ.'TRD' ) THEN |
260 |
NB = 32 |
261 |
ELSE IF( C3.EQ.'GST' ) THEN |
262 |
NB = 64 |
263 |
END IF |
264 |
ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN |
265 |
IF( C3( 1: 1 ).EQ.'G' ) THEN |
266 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
267 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
268 |
$ THEN |
269 |
NB = 32 |
270 |
END IF |
271 |
ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
272 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
273 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
274 |
$ THEN |
275 |
NB = 32 |
276 |
END IF |
277 |
END IF |
278 |
ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN |
279 |
IF( C3( 1: 1 ).EQ.'G' ) THEN |
280 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
281 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
282 |
$ THEN |
283 |
NB = 32 |
284 |
END IF |
285 |
ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
286 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
287 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
288 |
$ THEN |
289 |
NB = 32 |
290 |
END IF |
291 |
END IF |
292 |
ELSE IF( C2.EQ.'GB' ) THEN |
293 |
IF( C3.EQ.'TRF' ) THEN |
294 |
IF( SNAME ) THEN |
295 |
IF( N4.LE.64 ) THEN |
296 |
NB = 1 |
297 |
ELSE |
298 |
NB = 32 |
299 |
END IF |
300 |
ELSE |
301 |
IF( N4.LE.64 ) THEN |
302 |
NB = 1 |
303 |
ELSE |
304 |
NB = 32 |
305 |
END IF |
306 |
END IF |
307 |
END IF |
308 |
ELSE IF( C2.EQ.'PB' ) THEN |
309 |
IF( C3.EQ.'TRF' ) THEN |
310 |
IF( SNAME ) THEN |
311 |
IF( N2.LE.64 ) THEN |
312 |
NB = 1 |
313 |
ELSE |
314 |
NB = 32 |
315 |
END IF |
316 |
ELSE |
317 |
IF( N2.LE.64 ) THEN |
318 |
NB = 1 |
319 |
ELSE |
320 |
NB = 32 |
321 |
END IF |
322 |
END IF |
323 |
END IF |
324 |
ELSE IF( C2.EQ.'TR' ) THEN |
325 |
IF( C3.EQ.'TRI' ) THEN |
326 |
IF( SNAME ) THEN |
327 |
NB = 64 |
328 |
ELSE |
329 |
NB = 64 |
330 |
END IF |
331 |
END IF |
332 |
ELSE IF( C2.EQ.'LA' ) THEN |
333 |
IF( C3.EQ.'UUM' ) THEN |
334 |
IF( SNAME ) THEN |
335 |
NB = 64 |
336 |
ELSE |
337 |
NB = 64 |
338 |
END IF |
339 |
END IF |
340 |
ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN |
341 |
IF( C3.EQ.'EBZ' ) THEN |
342 |
NB = 1 |
343 |
END IF |
344 |
END IF |
345 |
ILAENV = NB |
346 |
RETURN |
347 |
* |
348 |
60 CONTINUE |
349 |
* |
350 |
* ISPEC = 2: minimum block size |
351 |
* |
352 |
NBMIN = 2 |
353 |
IF( C2.EQ.'GE' ) THEN |
354 |
IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. |
355 |
$ 'QLF' ) THEN |
356 |
IF( SNAME ) THEN |
357 |
NBMIN = 2 |
358 |
ELSE |
359 |
NBMIN = 2 |
360 |
END IF |
361 |
ELSE IF( C3.EQ.'HRD' ) THEN |
362 |
IF( SNAME ) THEN |
363 |
NBMIN = 2 |
364 |
ELSE |
365 |
NBMIN = 2 |
366 |
END IF |
367 |
ELSE IF( C3.EQ.'BRD' ) THEN |
368 |
IF( SNAME ) THEN |
369 |
NBMIN = 2 |
370 |
ELSE |
371 |
NBMIN = 2 |
372 |
END IF |
373 |
ELSE IF( C3.EQ.'TRI' ) THEN |
374 |
IF( SNAME ) THEN |
375 |
NBMIN = 2 |
376 |
ELSE |
377 |
NBMIN = 2 |
378 |
END IF |
379 |
END IF |
380 |
ELSE IF( C2.EQ.'SY' ) THEN |
381 |
IF( C3.EQ.'TRF' ) THEN |
382 |
IF( SNAME ) THEN |
383 |
NBMIN = 8 |
384 |
ELSE |
385 |
NBMIN = 8 |
386 |
END IF |
387 |
ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN |
388 |
NBMIN = 2 |
389 |
END IF |
390 |
ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
391 |
IF( C3.EQ.'TRD' ) THEN |
392 |
NBMIN = 2 |
393 |
END IF |
394 |
ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN |
395 |
IF( C3( 1: 1 ).EQ.'G' ) THEN |
396 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
397 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
398 |
$ THEN |
399 |
NBMIN = 2 |
400 |
END IF |
401 |
ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
402 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
403 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
404 |
$ THEN |
405 |
NBMIN = 2 |
406 |
END IF |
407 |
END IF |
408 |
ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN |
409 |
IF( C3( 1: 1 ).EQ.'G' ) THEN |
410 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
411 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
412 |
$ THEN |
413 |
NBMIN = 2 |
414 |
END IF |
415 |
ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
416 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
417 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
418 |
$ THEN |
419 |
NBMIN = 2 |
420 |
END IF |
421 |
END IF |
422 |
END IF |
423 |
ILAENV = NBMIN |
424 |
RETURN |
425 |
* |
426 |
70 CONTINUE |
427 |
* |
428 |
* ISPEC = 3: crossover point |
429 |
* |
430 |
NX = 0 |
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 |
NX = 128 |
436 |
ELSE |
437 |
NX = 128 |
438 |
END IF |
439 |
ELSE IF( C3.EQ.'HRD' ) THEN |
440 |
IF( SNAME ) THEN |
441 |
NX = 128 |
442 |
ELSE |
443 |
NX = 128 |
444 |
END IF |
445 |
ELSE IF( C3.EQ.'BRD' ) THEN |
446 |
IF( SNAME ) THEN |
447 |
NX = 128 |
448 |
ELSE |
449 |
NX = 128 |
450 |
END IF |
451 |
END IF |
452 |
ELSE IF( C2.EQ.'SY' ) THEN |
453 |
IF( SNAME .AND. C3.EQ.'TRD' ) THEN |
454 |
NX = 32 |
455 |
END IF |
456 |
ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
457 |
IF( C3.EQ.'TRD' ) THEN |
458 |
NX = 32 |
459 |
END IF |
460 |
ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN |
461 |
IF( C3( 1: 1 ).EQ.'G' ) THEN |
462 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
463 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
464 |
$ THEN |
465 |
NX = 128 |
466 |
END IF |
467 |
END IF |
468 |
ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN |
469 |
IF( C3( 1: 1 ).EQ.'G' ) THEN |
470 |
IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
471 |
$ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
472 |
$ THEN |
473 |
NX = 128 |
474 |
END IF |
475 |
END IF |
476 |
END IF |
477 |
ILAENV = NX |
478 |
RETURN |
479 |
* |
480 |
80 CONTINUE |
481 |
* |
482 |
* ISPEC = 4: number of shifts (used by xHSEQR) |
483 |
* |
484 |
ILAENV = 6 |
485 |
RETURN |
486 |
* |
487 |
90 CONTINUE |
488 |
* |
489 |
* ISPEC = 5: minimum column dimension (not used) |
490 |
* |
491 |
ILAENV = 2 |
492 |
RETURN |
493 |
* |
494 |
100 CONTINUE |
495 |
* |
496 |
* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) |
497 |
* |
498 |
ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) |
499 |
RETURN |
500 |
* |
501 |
110 CONTINUE |
502 |
* |
503 |
* ISPEC = 7: number of processors (not used) |
504 |
* |
505 |
ILAENV = 1 |
506 |
RETURN |
507 |
* |
508 |
120 CONTINUE |
509 |
* |
510 |
* ISPEC = 8: crossover point for multishift (used by xHSEQR) |
511 |
* |
512 |
ILAENV = 50 |
513 |
RETURN |
514 |
* |
515 |
130 CONTINUE |
516 |
* |
517 |
* ISPEC = 9: maximum size of the subproblems at the bottom of the |
518 |
* computation tree in the divide-and-conquer algorithm |
519 |
* (used by xGELSD and xGESDD) |
520 |
* |
521 |
ILAENV = 25 |
522 |
RETURN |
523 |
* |
524 |
140 CONTINUE |
525 |
* |
526 |
* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap |
527 |
* |
528 |
* ILAENV = 0 |
529 |
ILAENV = 1 |
530 |
IF( ILAENV.EQ.1 ) THEN |
531 |
ILAENV = IEEECK( 1, 0.0, 1.0 ) |
532 |
END IF |
533 |
RETURN |
534 |
* |
535 |
150 CONTINUE |
536 |
* |
537 |
* ISPEC = 11: infinity arithmetic can be trusted not to trap |
538 |
* |
539 |
* ILAENV = 0 |
540 |
ILAENV = 1 |
541 |
IF( ILAENV.EQ.1 ) THEN |
542 |
ILAENV = IEEECK( 0, 0.0, 1.0 ) |
543 |
END IF |
544 |
RETURN |
545 |
* |
546 |
160 CONTINUE |
547 |
* |
548 |
* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. |
549 |
* |
550 |
ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) |
551 |
RETURN |
552 |
* |
553 |
* End of ILAENV |
554 |
* |
555 |
END |