LAPACK 3.11.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
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*> \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 infinity and NaN arithmetic can be trusted not to trap
83*> =11: infinity arithmetic can be trusted not to trap
84*> 12 <= ISPEC <= 17:
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*> \ingroup OTHERauxiliary
136*
137*> \par Further Details:
138* =====================
139*>
140*> \verbatim
141*>
142*> The following conventions have been used when calling ILAENV from the
143*> LAPACK routines:
144*> 1) OPTS is a concatenation of all of the character options to
145*> subroutine NAME, in the same order that they appear in the
146*> argument list for NAME, even if they are not used in determining
147*> the value of the parameter specified by ISPEC.
148*> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
149*> that they appear in the argument list for NAME. N1 is used
150*> first, N2 second, and so on, and unused problem dimensions are
151*> passed a value of -1.
152*> 3) The parameter value returned by ILAENV is checked for validity in
153*> the calling subroutine. For example, ILAENV is used to retrieve
154*> the optimal blocksize for STRTRI as follows:
155*>
156*> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
157*> IF( NB.LE.1 ) NB = MAX( 1, N )
158*> \endverbatim
159*>
160* =====================================================================
161 INTEGER FUNCTION ilaenv( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
162*
163* -- LAPACK auxiliary routine --
164* -- LAPACK is a software package provided by Univ. of Tennessee, --
165* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
166*
167* .. Scalar Arguments ..
168 CHARACTER*( * ) name, opts
169 INTEGER ispec, n1, n2, n3, n4
170* ..
171*
172* =====================================================================
173*
174* .. Local Scalars ..
175 INTEGER i, ic, iz, nb, nbmin, nx
176 LOGICAL cname, sname, twostage
177 CHARACTER c1*1, c2*2, c4*2, c3*3, subnam*16
178* ..
179* .. Intrinsic Functions ..
180 INTRINSIC char, ichar, int, min, real
181* ..
182* .. External Functions ..
183 INTEGER ieeeck, iparmq, iparam2stage
184 EXTERNAL ieeeck, iparmq, iparam2stage
185* ..
186* .. Executable Statements ..
187*
188 GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
189 $ 130, 140, 150, 160, 160, 160, 160, 160, 160)ispec
190*
191* Invalid value for ISPEC
192*
193 ilaenv = -1
194 RETURN
195*
196 10 CONTINUE
197*
198* Convert NAME to upper case if the first character is lower case.
199*
200 ilaenv = 1
201 subnam = name
202 ic = ichar( subnam( 1: 1 ) )
203 iz = ichar( 'Z' )
204 IF( iz.EQ.90 .OR. iz.EQ.122 ) THEN
205*
206* ASCII character set
207*
208 IF( ic.GE.97 .AND. ic.LE.122 ) THEN
209 subnam( 1: 1 ) = char( ic-32 )
210 DO 20 i = 2, 6
211 ic = ichar( subnam( i: i ) )
212 IF( ic.GE.97 .AND. ic.LE.122 )
213 $ subnam( i: i ) = char( ic-32 )
214 20 CONTINUE
215 END IF
216*
217 ELSE IF( iz.EQ.233 .OR. iz.EQ.169 ) THEN
218*
219* EBCDIC character set
220*
221 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
222 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
223 $ ( ic.GE.162 .AND. ic.LE.169 ) ) THEN
224 subnam( 1: 1 ) = char( ic+64 )
225 DO 30 i = 2, 6
226 ic = ichar( subnam( i: i ) )
227 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
228 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
229 $ ( ic.GE.162 .AND. ic.LE.169 ) )subnam( i:
230 $ i ) = char( ic+64 )
231 30 CONTINUE
232 END IF
233*
234 ELSE IF( iz.EQ.218 .OR. iz.EQ.250 ) THEN
235*
236* Prime machines: ASCII+128
237*
238 IF( ic.GE.225 .AND. ic.LE.250 ) THEN
239 subnam( 1: 1 ) = char( ic-32 )
240 DO 40 i = 2, 6
241 ic = ichar( subnam( i: i ) )
242 IF( ic.GE.225 .AND. ic.LE.250 )
243 $ subnam( i: i ) = char( ic-32 )
244 40 CONTINUE
245 END IF
246 END IF
247*
248 c1 = subnam( 1: 1 )
249 sname = c1.EQ.'S' .OR. c1.EQ.'D'
250 cname = c1.EQ.'C' .OR. c1.EQ.'Z'
251 IF( .NOT.( cname .OR. sname ) )
252 $ RETURN
253 c2 = subnam( 2: 3 )
254 c3 = subnam( 4: 6 )
255 c4 = c3( 2: 3 )
256 twostage = len( subnam ).GE.11
257 $ .AND. subnam( 11: 11 ).EQ.'2'
258*
259 GO TO ( 50, 60, 70 )ispec
260*
261 50 CONTINUE
262*
263* ISPEC = 1: block size
264*
265* In these examples, separate code is provided for setting NB for
266* real and complex. We assume that NB will take the same value in
267* single or double precision.
268*
269 nb = 1
270*
271 IF( subnam(2:6).EQ.'LAORH' ) THEN
272*
273* This is for *LAORHR_GETRFNP routine
274*
275 IF( sname ) THEN
276 nb = 32
277 ELSE
278 nb = 32
279 END IF
280 ELSE IF( c2.EQ.'GE' ) THEN
281 IF( c3.EQ.'TRF' ) THEN
282 IF( sname ) THEN
283 nb = 64
284 ELSE
285 nb = 64
286 END IF
287 ELSE IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR.
288 $ c3.EQ.'QLF' ) THEN
289 IF( sname ) THEN
290 nb = 32
291 ELSE
292 nb = 32
293 END IF
294 ELSE IF( c3.EQ.'QR ') THEN
295 IF( n3 .EQ. 1) THEN
296 IF( sname ) THEN
297* M*N
298 IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
299 nb = n1
300 ELSE
301 nb = 32768/n2
302 END IF
303 ELSE
304 IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
305 nb = n1
306 ELSE
307 nb = 32768/n2
308 END IF
309 END IF
310 ELSE
311 IF( sname ) THEN
312 nb = 1
313 ELSE
314 nb = 1
315 END IF
316 END IF
317 ELSE IF( c3.EQ.'LQ ') THEN
318 IF( n3 .EQ. 2) THEN
319 IF( sname ) THEN
320* M*N
321 IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
322 nb = n1
323 ELSE
324 nb = 32768/n2
325 END IF
326 ELSE
327 IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
328 nb = n1
329 ELSE
330 nb = 32768/n2
331 END IF
332 END IF
333 ELSE
334 IF( sname ) THEN
335 nb = 1
336 ELSE
337 nb = 1
338 END IF
339 END IF
340 ELSE IF( c3.EQ.'HRD' ) THEN
341 IF( sname ) THEN
342 nb = 32
343 ELSE
344 nb = 32
345 END IF
346 ELSE IF( c3.EQ.'BRD' ) THEN
347 IF( sname ) THEN
348 nb = 32
349 ELSE
350 nb = 32
351 END IF
352 ELSE IF( c3.EQ.'TRI' ) THEN
353 IF( sname ) THEN
354 nb = 64
355 ELSE
356 nb = 64
357 END IF
358 END IF
359 ELSE IF( c2.EQ.'PO' ) THEN
360 IF( c3.EQ.'TRF' ) THEN
361 IF( sname ) THEN
362 nb = 64
363 ELSE
364 nb = 64
365 END IF
366 END IF
367 ELSE IF( c2.EQ.'SY' ) THEN
368 IF( c3.EQ.'TRF' ) THEN
369 IF( sname ) THEN
370 IF( twostage ) THEN
371 nb = 192
372 ELSE
373 nb = 64
374 END IF
375 ELSE
376 IF( twostage ) THEN
377 nb = 192
378 ELSE
379 nb = 64
380 END IF
381 END IF
382 ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
383 nb = 32
384 ELSE IF( sname .AND. c3.EQ.'GST' ) THEN
385 nb = 64
386 END IF
387 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
388 IF( c3.EQ.'TRF' ) THEN
389 IF( twostage ) THEN
390 nb = 192
391 ELSE
392 nb = 64
393 END IF
394 ELSE IF( c3.EQ.'TRD' ) THEN
395 nb = 32
396 ELSE IF( c3.EQ.'GST' ) THEN
397 nb = 64
398 END IF
399 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
400 IF( c3( 1: 1 ).EQ.'G' ) THEN
401 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
402 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
403 $ THEN
404 nb = 32
405 END IF
406 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
407 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
408 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
409 $ THEN
410 nb = 32
411 END IF
412 END IF
413 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
414 IF( c3( 1: 1 ).EQ.'G' ) THEN
415 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
416 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
417 $ THEN
418 nb = 32
419 END IF
420 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
421 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
422 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
423 $ THEN
424 nb = 32
425 END IF
426 END IF
427 ELSE IF( c2.EQ.'GB' ) THEN
428 IF( c3.EQ.'TRF' ) THEN
429 IF( sname ) THEN
430 IF( n4.LE.64 ) THEN
431 nb = 1
432 ELSE
433 nb = 32
434 END IF
435 ELSE
436 IF( n4.LE.64 ) THEN
437 nb = 1
438 ELSE
439 nb = 32
440 END IF
441 END IF
442 END IF
443 ELSE IF( c2.EQ.'PB' ) THEN
444 IF( c3.EQ.'TRF' ) THEN
445 IF( sname ) THEN
446 IF( n2.LE.64 ) THEN
447 nb = 1
448 ELSE
449 nb = 32
450 END IF
451 ELSE
452 IF( n2.LE.64 ) THEN
453 nb = 1
454 ELSE
455 nb = 32
456 END IF
457 END IF
458 END IF
459 ELSE IF( c2.EQ.'TR' ) THEN
460 IF( c3.EQ.'TRI' ) THEN
461 IF( sname ) THEN
462 nb = 64
463 ELSE
464 nb = 64
465 END IF
466 ELSE IF ( c3.EQ.'EVC' ) THEN
467 IF( sname ) THEN
468 nb = 64
469 ELSE
470 nb = 64
471 END IF
472 ELSE IF( c3.EQ.'SYL' ) THEN
473* The upper bound is to prevent overly aggressive scaling.
474 IF( sname ) THEN
475 nb = min( max( 48, int( ( min( n1, n2 ) * 16 ) / 100) ),
476 $ 240 )
477 ELSE
478 nb = min( max( 24, int( ( min( n1, n2 ) * 8 ) / 100) ),
479 $ 80 )
480 END IF
481 END IF
482 ELSE IF( c2.EQ.'LA' ) THEN
483 IF( c3.EQ.'UUM' ) THEN
484 IF( sname ) THEN
485 nb = 64
486 ELSE
487 nb = 64
488 END IF
489 ELSE IF( c3.EQ.'TRS' ) THEN
490 IF( sname ) THEN
491 nb = 32
492 ELSE
493 nb = 32
494 END IF
495 END IF
496 ELSE IF( sname .AND. c2.EQ.'ST' ) THEN
497 IF( c3.EQ.'EBZ' ) THEN
498 nb = 1
499 END IF
500 ELSE IF( c2.EQ.'GG' ) THEN
501 nb = 32
502 IF( c3.EQ.'HD3' ) THEN
503 IF( sname ) THEN
504 nb = 32
505 ELSE
506 nb = 32
507 END IF
508 END IF
509 END IF
510 ilaenv = nb
511 RETURN
512*
513 60 CONTINUE
514*
515* ISPEC = 2: minimum block size
516*
517 nbmin = 2
518 IF( c2.EQ.'GE' ) THEN
519 IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
520 $ 'QLF' ) THEN
521 IF( sname ) THEN
522 nbmin = 2
523 ELSE
524 nbmin = 2
525 END IF
526 ELSE IF( c3.EQ.'HRD' ) THEN
527 IF( sname ) THEN
528 nbmin = 2
529 ELSE
530 nbmin = 2
531 END IF
532 ELSE IF( c3.EQ.'BRD' ) THEN
533 IF( sname ) THEN
534 nbmin = 2
535 ELSE
536 nbmin = 2
537 END IF
538 ELSE IF( c3.EQ.'TRI' ) THEN
539 IF( sname ) THEN
540 nbmin = 2
541 ELSE
542 nbmin = 2
543 END IF
544 END IF
545 ELSE IF( c2.EQ.'SY' ) THEN
546 IF( c3.EQ.'TRF' ) THEN
547 IF( sname ) THEN
548 nbmin = 8
549 ELSE
550 nbmin = 8
551 END IF
552 ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
553 nbmin = 2
554 END IF
555 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
556 IF( c3.EQ.'TRD' ) THEN
557 nbmin = 2
558 END IF
559 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
560 IF( c3( 1: 1 ).EQ.'G' ) THEN
561 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
562 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
563 $ THEN
564 nbmin = 2
565 END IF
566 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
567 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
568 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
569 $ THEN
570 nbmin = 2
571 END IF
572 END IF
573 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
574 IF( c3( 1: 1 ).EQ.'G' ) THEN
575 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
576 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
577 $ THEN
578 nbmin = 2
579 END IF
580 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
581 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
582 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
583 $ THEN
584 nbmin = 2
585 END IF
586 END IF
587 ELSE IF( c2.EQ.'GG' ) THEN
588 nbmin = 2
589 IF( c3.EQ.'HD3' ) THEN
590 nbmin = 2
591 END IF
592 END IF
593 ilaenv = nbmin
594 RETURN
595*
596 70 CONTINUE
597*
598* ISPEC = 3: crossover point
599*
600 nx = 0
601 IF( c2.EQ.'GE' ) THEN
602 IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
603 $ 'QLF' ) THEN
604 IF( sname ) THEN
605 nx = 128
606 ELSE
607 nx = 128
608 END IF
609 ELSE IF( c3.EQ.'HRD' ) THEN
610 IF( sname ) THEN
611 nx = 128
612 ELSE
613 nx = 128
614 END IF
615 ELSE IF( c3.EQ.'BRD' ) THEN
616 IF( sname ) THEN
617 nx = 128
618 ELSE
619 nx = 128
620 END IF
621 END IF
622 ELSE IF( c2.EQ.'SY' ) THEN
623 IF( sname .AND. c3.EQ.'TRD' ) THEN
624 nx = 32
625 END IF
626 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
627 IF( c3.EQ.'TRD' ) THEN
628 nx = 32
629 END IF
630 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
631 IF( c3( 1: 1 ).EQ.'G' ) THEN
632 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
633 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
634 $ THEN
635 nx = 128
636 END IF
637 END IF
638 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
639 IF( c3( 1: 1 ).EQ.'G' ) THEN
640 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
641 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
642 $ THEN
643 nx = 128
644 END IF
645 END IF
646 ELSE IF( c2.EQ.'GG' ) THEN
647 nx = 128
648 IF( c3.EQ.'HD3' ) THEN
649 nx = 128
650 END IF
651 END IF
652 ilaenv = nx
653 RETURN
654*
655 80 CONTINUE
656*
657* ISPEC = 4: number of shifts (used by xHSEQR)
658*
659 ilaenv = 6
660 RETURN
661*
662 90 CONTINUE
663*
664* ISPEC = 5: minimum column dimension (not used)
665*
666 ilaenv = 2
667 RETURN
668*
669 100 CONTINUE
670*
671* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
672*
673 ilaenv = int( real( min( n1, n2 ) )*1.6e0 )
674 RETURN
675*
676 110 CONTINUE
677*
678* ISPEC = 7: number of processors (not used)
679*
680 ilaenv = 1
681 RETURN
682*
683 120 CONTINUE
684*
685* ISPEC = 8: crossover point for multishift (used by xHSEQR)
686*
687 ilaenv = 50
688 RETURN
689*
690 130 CONTINUE
691*
692* ISPEC = 9: maximum size of the subproblems at the bottom of the
693* computation tree in the divide-and-conquer algorithm
694* (used by xGELSD and xGESDD)
695*
696 ilaenv = 25
697 RETURN
698*
699 140 CONTINUE
700*
701* ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap
702*
703* ILAENV = 0
704 ilaenv = 1
705 IF( ilaenv.EQ.1 ) THEN
706 ilaenv = ieeeck( 1, 0.0, 1.0 )
707 END IF
708 RETURN
709*
710 150 CONTINUE
711*
712* ISPEC = 11: ieee infinity arithmetic can be trusted not to trap
713*
714* ILAENV = 0
715 ilaenv = 1
716 IF( ilaenv.EQ.1 ) THEN
717 ilaenv = ieeeck( 0, 0.0, 1.0 )
718 END IF
719 RETURN
720*
721 160 CONTINUE
722*
723* 12 <= ISPEC <= 17: xHSEQR or related subroutines.
724*
725 ilaenv = iparmq( ispec, name, opts, n1, n2, n3, n4 )
726 RETURN
727*
728* End of ILAENV
729*
730 END
integer function iparmq(ISPEC, NAME, OPTS, N, ILO, IHI, LWORK)
IPARMQ
Definition: iparmq.f:230
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