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