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 December 2016
136: *
137: *> \ingroup OTHERauxiliary
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.7.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: * December 2016
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, IPARAM2STAGE
187: EXTERNAL IEEECK, IPARMQ, IPARAM2STAGE
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,
193: $ 170, 170, 170, 170, 170 )ISPEC
194: *
195: * Invalid value for ISPEC
196: *
197: ILAENV = -1
198: RETURN
199: *
200: 10 CONTINUE
201: *
202: * Convert NAME to upper case if the first character is lower case.
203: *
204: ILAENV = 1
205: SUBNAM = NAME
206: IC = ICHAR( SUBNAM( 1: 1 ) )
207: IZ = ICHAR( 'Z' )
208: IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
209: *
210: * ASCII character set
211: *
212: IF( IC.GE.97 .AND. IC.LE.122 ) THEN
213: SUBNAM( 1: 1 ) = CHAR( IC-32 )
214: DO 20 I = 2, 6
215: IC = ICHAR( SUBNAM( I: I ) )
216: IF( IC.GE.97 .AND. IC.LE.122 )
217: $ SUBNAM( I: I ) = CHAR( IC-32 )
218: 20 CONTINUE
219: END IF
220: *
221: ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
222: *
223: * EBCDIC character set
224: *
225: IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
226: $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
227: $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
228: SUBNAM( 1: 1 ) = CHAR( IC+64 )
229: DO 30 I = 2, 6
230: IC = ICHAR( SUBNAM( I: I ) )
231: IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
232: $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
233: $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
234: $ I ) = CHAR( IC+64 )
235: 30 CONTINUE
236: END IF
237: *
238: ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
239: *
240: * Prime machines: ASCII+128
241: *
242: IF( IC.GE.225 .AND. IC.LE.250 ) THEN
243: SUBNAM( 1: 1 ) = CHAR( IC-32 )
244: DO 40 I = 2, 6
245: IC = ICHAR( SUBNAM( I: I ) )
246: IF( IC.GE.225 .AND. IC.LE.250 )
247: $ SUBNAM( I: I ) = CHAR( IC-32 )
248: 40 CONTINUE
249: END IF
250: END IF
251: *
252: C1 = SUBNAM( 1: 1 )
253: SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
254: CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
255: IF( .NOT.( CNAME .OR. SNAME ) )
256: $ RETURN
257: C2 = SUBNAM( 2: 3 )
258: C3 = SUBNAM( 4: 6 )
259: C4 = C3( 2: 3 )
260: *
261: GO TO ( 50, 60, 70 )ISPEC
262: *
263: 50 CONTINUE
264: *
265: * ISPEC = 1: block size
266: *
267: * In these examples, separate code is provided for setting NB for
268: * real and complex. We assume that NB will take the same value in
269: * single or double precision.
270: *
271: NB = 1
272: *
273: IF( C2.EQ.'GE' ) THEN
274: IF( C3.EQ.'TRF' ) THEN
275: IF( SNAME ) THEN
276: NB = 64
277: ELSE
278: NB = 64
279: END IF
280: ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
281: $ C3.EQ.'QLF' ) THEN
282: IF( SNAME ) THEN
283: NB = 32
284: ELSE
285: NB = 32
286: END IF
287: ELSE IF( C3.EQ.'QR ') THEN
288: IF( N3 .EQ. 1) THEN
289: IF( SNAME ) THEN
290: * M*N
291: IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
292: NB = N1
293: ELSE
294: NB = 32768/N2
295: END IF
296: ELSE
297: IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
298: NB = N1
299: ELSE
300: NB = 32768/N2
301: END IF
302: END IF
303: ELSE
304: IF( SNAME ) THEN
305: NB = 1
306: ELSE
307: NB = 1
308: END IF
309: END IF
310: ELSE IF( C3.EQ.'LQ ') THEN
311: IF( N3 .EQ. 2) THEN
312: IF( SNAME ) THEN
313: * M*N
314: IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
315: NB = N1
316: ELSE
317: NB = 32768/N2
318: END IF
319: ELSE
320: IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
321: NB = N1
322: ELSE
323: NB = 32768/N2
324: END IF
325: END IF
326: ELSE
327: IF( SNAME ) THEN
328: NB = 1
329: ELSE
330: NB = 1
331: END IF
332: END IF
333: ELSE IF( C3.EQ.'HRD' ) THEN
334: IF( SNAME ) THEN
335: NB = 32
336: ELSE
337: NB = 32
338: END IF
339: ELSE IF( C3.EQ.'BRD' ) THEN
340: IF( SNAME ) THEN
341: NB = 32
342: ELSE
343: NB = 32
344: END IF
345: ELSE IF( C3.EQ.'TRI' ) THEN
346: IF( SNAME ) THEN
347: NB = 64
348: ELSE
349: NB = 64
350: END IF
351: END IF
352: ELSE IF( C2.EQ.'PO' ) THEN
353: IF( C3.EQ.'TRF' ) THEN
354: IF( SNAME ) THEN
355: NB = 64
356: ELSE
357: NB = 64
358: END IF
359: END IF
360: ELSE IF( C2.EQ.'SY' ) THEN
361: IF( C3.EQ.'TRF' ) THEN
362: IF( SNAME ) THEN
363: NB = 64
364: ELSE
365: NB = 64
366: END IF
367: ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
368: NB = 32
369: ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
370: NB = 64
371: END IF
372: ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
373: IF( C3.EQ.'TRF' ) THEN
374: NB = 64
375: ELSE IF( C3.EQ.'TRD' ) THEN
376: NB = 32
377: ELSE IF( C3.EQ.'GST' ) THEN
378: NB = 64
379: END IF
380: ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
381: IF( C3( 1: 1 ).EQ.'G' ) THEN
382: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
383: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
384: $ THEN
385: NB = 32
386: END IF
387: ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
388: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
389: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
390: $ THEN
391: NB = 32
392: END IF
393: END IF
394: ELSE IF( CNAME .AND. C2.EQ.'UN' ) 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: NB = 32
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: NB = 32
406: END IF
407: END IF
408: ELSE IF( C2.EQ.'GB' ) THEN
409: IF( C3.EQ.'TRF' ) THEN
410: IF( SNAME ) THEN
411: IF( N4.LE.64 ) THEN
412: NB = 1
413: ELSE
414: NB = 32
415: END IF
416: ELSE
417: IF( N4.LE.64 ) THEN
418: NB = 1
419: ELSE
420: NB = 32
421: END IF
422: END IF
423: END IF
424: ELSE IF( C2.EQ.'PB' ) THEN
425: IF( C3.EQ.'TRF' ) THEN
426: IF( SNAME ) THEN
427: IF( N2.LE.64 ) THEN
428: NB = 1
429: ELSE
430: NB = 32
431: END IF
432: ELSE
433: IF( N2.LE.64 ) THEN
434: NB = 1
435: ELSE
436: NB = 32
437: END IF
438: END IF
439: END IF
440: ELSE IF( C2.EQ.'TR' ) THEN
441: IF( C3.EQ.'TRI' ) THEN
442: IF( SNAME ) THEN
443: NB = 64
444: ELSE
445: NB = 64
446: END IF
447: ELSE IF ( C3.EQ.'EVC' ) THEN
448: IF( SNAME ) THEN
449: NB = 64
450: ELSE
451: NB = 64
452: END IF
453: END IF
454: ELSE IF( C2.EQ.'LA' ) THEN
455: IF( C3.EQ.'UUM' ) THEN
456: IF( SNAME ) THEN
457: NB = 64
458: ELSE
459: NB = 64
460: END IF
461: END IF
462: ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
463: IF( C3.EQ.'EBZ' ) THEN
464: NB = 1
465: END IF
466: ELSE IF( C2.EQ.'GG' ) THEN
467: NB = 32
468: IF( C3.EQ.'HD3' ) THEN
469: IF( SNAME ) THEN
470: NB = 32
471: ELSE
472: NB = 32
473: END IF
474: END IF
475: END IF
476: ILAENV = NB
477: RETURN
478: *
479: 60 CONTINUE
480: *
481: * ISPEC = 2: minimum block size
482: *
483: NBMIN = 2
484: IF( C2.EQ.'GE' ) THEN
485: IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
486: $ 'QLF' ) THEN
487: IF( SNAME ) THEN
488: NBMIN = 2
489: ELSE
490: NBMIN = 2
491: END IF
492: ELSE IF( C3.EQ.'HRD' ) THEN
493: IF( SNAME ) THEN
494: NBMIN = 2
495: ELSE
496: NBMIN = 2
497: END IF
498: ELSE IF( C3.EQ.'BRD' ) THEN
499: IF( SNAME ) THEN
500: NBMIN = 2
501: ELSE
502: NBMIN = 2
503: END IF
504: ELSE IF( C3.EQ.'TRI' ) THEN
505: IF( SNAME ) THEN
506: NBMIN = 2
507: ELSE
508: NBMIN = 2
509: END IF
510: END IF
511: ELSE IF( C2.EQ.'SY' ) THEN
512: IF( C3.EQ.'TRF' ) THEN
513: IF( SNAME ) THEN
514: NBMIN = 8
515: ELSE
516: NBMIN = 8
517: END IF
518: ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
519: NBMIN = 2
520: END IF
521: ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
522: IF( C3.EQ.'TRD' ) THEN
523: NBMIN = 2
524: END IF
525: ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
526: IF( C3( 1: 1 ).EQ.'G' ) THEN
527: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
528: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
529: $ THEN
530: NBMIN = 2
531: END IF
532: ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
533: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
534: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
535: $ THEN
536: NBMIN = 2
537: END IF
538: END IF
539: ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
540: IF( C3( 1: 1 ).EQ.'G' ) THEN
541: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
542: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
543: $ THEN
544: NBMIN = 2
545: END IF
546: ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
547: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
548: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
549: $ THEN
550: NBMIN = 2
551: END IF
552: END IF
553: ELSE IF( C2.EQ.'GG' ) THEN
554: NBMIN = 2
555: IF( C3.EQ.'HD3' ) THEN
556: NBMIN = 2
557: END IF
558: END IF
559: ILAENV = NBMIN
560: RETURN
561: *
562: 70 CONTINUE
563: *
564: * ISPEC = 3: crossover point
565: *
566: NX = 0
567: IF( C2.EQ.'GE' ) THEN
568: IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
569: $ 'QLF' ) THEN
570: IF( SNAME ) THEN
571: NX = 128
572: ELSE
573: NX = 128
574: END IF
575: ELSE IF( C3.EQ.'HRD' ) THEN
576: IF( SNAME ) THEN
577: NX = 128
578: ELSE
579: NX = 128
580: END IF
581: ELSE IF( C3.EQ.'BRD' ) THEN
582: IF( SNAME ) THEN
583: NX = 128
584: ELSE
585: NX = 128
586: END IF
587: END IF
588: ELSE IF( C2.EQ.'SY' ) THEN
589: IF( SNAME .AND. C3.EQ.'TRD' ) THEN
590: NX = 32
591: END IF
592: ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
593: IF( C3.EQ.'TRD' ) THEN
594: NX = 32
595: END IF
596: ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
597: IF( C3( 1: 1 ).EQ.'G' ) THEN
598: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
599: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
600: $ THEN
601: NX = 128
602: END IF
603: END IF
604: ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
605: IF( C3( 1: 1 ).EQ.'G' ) THEN
606: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
607: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
608: $ THEN
609: NX = 128
610: END IF
611: END IF
612: ELSE IF( C2.EQ.'GG' ) THEN
613: NX = 128
614: IF( C3.EQ.'HD3' ) THEN
615: NX = 128
616: END IF
617: END IF
618: ILAENV = NX
619: RETURN
620: *
621: 80 CONTINUE
622: *
623: * ISPEC = 4: number of shifts (used by xHSEQR)
624: *
625: ILAENV = 6
626: RETURN
627: *
628: 90 CONTINUE
629: *
630: * ISPEC = 5: minimum column dimension (not used)
631: *
632: ILAENV = 2
633: RETURN
634: *
635: 100 CONTINUE
636: *
637: * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
638: *
639: ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
640: RETURN
641: *
642: 110 CONTINUE
643: *
644: * ISPEC = 7: number of processors (not used)
645: *
646: ILAENV = 1
647: RETURN
648: *
649: 120 CONTINUE
650: *
651: * ISPEC = 8: crossover point for multishift (used by xHSEQR)
652: *
653: ILAENV = 50
654: RETURN
655: *
656: 130 CONTINUE
657: *
658: * ISPEC = 9: maximum size of the subproblems at the bottom of the
659: * computation tree in the divide-and-conquer algorithm
660: * (used by xGELSD and xGESDD)
661: *
662: ILAENV = 25
663: RETURN
664: *
665: 140 CONTINUE
666: *
667: * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
668: *
669: * ILAENV = 0
670: ILAENV = 1
671: IF( ILAENV.EQ.1 ) THEN
672: ILAENV = IEEECK( 1, 0.0, 1.0 )
673: END IF
674: RETURN
675: *
676: 150 CONTINUE
677: *
678: * ISPEC = 11: infinity arithmetic can be trusted not to trap
679: *
680: * ILAENV = 0
681: ILAENV = 1
682: IF( ILAENV.EQ.1 ) THEN
683: ILAENV = IEEECK( 0, 0.0, 1.0 )
684: END IF
685: RETURN
686: *
687: 160 CONTINUE
688: *
689: * 12 <= ISPEC <= 16: xHSEQR or related subroutines.
690: *
691: ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
692: RETURN
693: *
694: 170 CONTINUE
695: *
696: * 17 <= ISPEC <= 21: 2stage eigenvalues and SVD or related subroutines.
697: *
698: ILAENV = IPARAM2STAGE( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
699: RETURN
700: *
701: * End of ILAENV
702: *
703: END
CVSweb interface <joel.bertrand@systella.fr>