LAPACK 3.12.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 ilaenv
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 ELSE IF( subnam( 4: 7 ).EQ.'QP3RK' ) THEN
359 IF( sname ) THEN
360 nb = 32
361 ELSE
362 nb = 32
363 END IF
364 END IF
365 ELSE IF( c2.EQ.'PO' ) THEN
366 IF( c3.EQ.'TRF' ) THEN
367 IF( sname ) THEN
368 nb = 64
369 ELSE
370 nb = 64
371 END IF
372 END IF
373 ELSE IF( c2.EQ.'SY' ) THEN
374 IF( c3.EQ.'TRF' ) THEN
375 IF( sname ) THEN
376 IF( twostage ) THEN
377 nb = 192
378 ELSE
379 nb = 64
380 END IF
381 ELSE
382 IF( twostage ) THEN
383 nb = 192
384 ELSE
385 nb = 64
386 END IF
387 END IF
388 ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
389 nb = 32
390 ELSE IF( sname .AND. c3.EQ.'GST' ) THEN
391 nb = 64
392 END IF
393 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
394 IF( c3.EQ.'TRF' ) THEN
395 IF( twostage ) THEN
396 nb = 192
397 ELSE
398 nb = 64
399 END IF
400 ELSE IF( c3.EQ.'TRD' ) THEN
401 nb = 32
402 ELSE IF( c3.EQ.'GST' ) THEN
403 nb = 64
404 END IF
405 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
406 IF( c3( 1: 1 ).EQ.'G' ) 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 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
413 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
414 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
415 $ THEN
416 nb = 32
417 END IF
418 END IF
419 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
420 IF( c3( 1: 1 ).EQ.'G' ) 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 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
427 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
428 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
429 $ THEN
430 nb = 32
431 END IF
432 END IF
433 ELSE IF( c2.EQ.'GB' ) THEN
434 IF( c3.EQ.'TRF' ) THEN
435 IF( sname ) THEN
436 IF( n4.LE.64 ) THEN
437 nb = 1
438 ELSE
439 nb = 32
440 END IF
441 ELSE
442 IF( n4.LE.64 ) THEN
443 nb = 1
444 ELSE
445 nb = 32
446 END IF
447 END IF
448 END IF
449 ELSE IF( c2.EQ.'PB' ) THEN
450 IF( c3.EQ.'TRF' ) THEN
451 IF( sname ) THEN
452 IF( n2.LE.64 ) THEN
453 nb = 1
454 ELSE
455 nb = 32
456 END IF
457 ELSE
458 IF( n2.LE.64 ) THEN
459 nb = 1
460 ELSE
461 nb = 32
462 END IF
463 END IF
464 END IF
465 ELSE IF( c2.EQ.'TR' ) THEN
466 IF( c3.EQ.'TRI' ) THEN
467 IF( sname ) THEN
468 nb = 64
469 ELSE
470 nb = 64
471 END IF
472 ELSE IF ( c3.EQ.'EVC' ) THEN
473 IF( sname ) THEN
474 nb = 64
475 ELSE
476 nb = 64
477 END IF
478 ELSE IF( c3.EQ.'SYL' ) THEN
479* The upper bound is to prevent overly aggressive scaling.
480 IF( sname ) THEN
481 nb = min( max( 48, int( ( min( n1, n2 ) * 16 ) / 100) ),
482 $ 240 )
483 ELSE
484 nb = min( max( 24, int( ( min( n1, n2 ) * 8 ) / 100) ),
485 $ 80 )
486 END IF
487 END IF
488 ELSE IF( c2.EQ.'LA' ) THEN
489 IF( c3.EQ.'UUM' ) THEN
490 IF( sname ) THEN
491 nb = 64
492 ELSE
493 nb = 64
494 END IF
495 ELSE IF( c3.EQ.'TRS' ) THEN
496 IF( sname ) THEN
497 nb = 32
498 ELSE
499 nb = 32
500 END IF
501 END IF
502 ELSE IF( sname .AND. c2.EQ.'ST' ) THEN
503 IF( c3.EQ.'EBZ' ) THEN
504 nb = 1
505 END IF
506 ELSE IF( c2.EQ.'GG' ) THEN
507 nb = 32
508 IF( c3.EQ.'HD3' ) THEN
509 IF( sname ) THEN
510 nb = 32
511 ELSE
512 nb = 32
513 END IF
514 END IF
515 END IF
516 ilaenv = nb
517 RETURN
518*
519 60 CONTINUE
520*
521* ISPEC = 2: minimum block size
522*
523 nbmin = 2
524 IF( c2.EQ.'GE' ) THEN
525 IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
526 $ 'QLF' ) THEN
527 IF( sname ) THEN
528 nbmin = 2
529 ELSE
530 nbmin = 2
531 END IF
532 ELSE IF( c3.EQ.'HRD' ) THEN
533 IF( sname ) THEN
534 nbmin = 2
535 ELSE
536 nbmin = 2
537 END IF
538 ELSE IF( c3.EQ.'BRD' ) THEN
539 IF( sname ) THEN
540 nbmin = 2
541 ELSE
542 nbmin = 2
543 END IF
544 ELSE IF( c3.EQ.'TRI' ) THEN
545 IF( sname ) THEN
546 nbmin = 2
547 ELSE
548 nbmin = 2
549 END IF
550 ELSE IF( subnam( 4: 7 ).EQ.'QP3RK' ) THEN
551 IF( sname ) THEN
552 nbmin = 2
553 ELSE
554 nbmin = 2
555 END IF
556 END IF
557
558 ELSE IF( c2.EQ.'SY' ) THEN
559 IF( c3.EQ.'TRF' ) THEN
560 IF( sname ) THEN
561 nbmin = 8
562 ELSE
563 nbmin = 8
564 END IF
565 ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
566 nbmin = 2
567 END IF
568 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
569 IF( c3.EQ.'TRD' ) THEN
570 nbmin = 2
571 END IF
572 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
573 IF( c3( 1: 1 ).EQ.'G' ) THEN
574 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
575 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
576 $ THEN
577 nbmin = 2
578 END IF
579 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
580 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
581 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
582 $ THEN
583 nbmin = 2
584 END IF
585 END IF
586 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
587 IF( c3( 1: 1 ).EQ.'G' ) THEN
588 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
589 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
590 $ THEN
591 nbmin = 2
592 END IF
593 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
594 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
595 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
596 $ THEN
597 nbmin = 2
598 END IF
599 END IF
600 ELSE IF( c2.EQ.'GG' ) THEN
601 nbmin = 2
602 IF( c3.EQ.'HD3' ) THEN
603 nbmin = 2
604 END IF
605 END IF
606 ilaenv = nbmin
607 RETURN
608*
609 70 CONTINUE
610*
611* ISPEC = 3: crossover point
612*
613 nx = 0
614 IF( c2.EQ.'GE' ) THEN
615 IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
616 $ 'QLF' ) THEN
617 IF( sname ) THEN
618 nx = 128
619 ELSE
620 nx = 128
621 END IF
622 ELSE IF( c3.EQ.'HRD' ) THEN
623 IF( sname ) THEN
624 nx = 128
625 ELSE
626 nx = 128
627 END IF
628 ELSE IF( c3.EQ.'BRD' ) THEN
629 IF( sname ) THEN
630 nx = 128
631 ELSE
632 nx = 128
633 END IF
634 ELSE IF( subnam( 4: 7 ).EQ.'QP3RK' ) THEN
635 IF( sname ) THEN
636 nx = 128
637 ELSE
638 nx = 128
639 END IF
640 END IF
641 ELSE IF( c2.EQ.'SY' ) THEN
642 IF( sname .AND. c3.EQ.'TRD' ) THEN
643 nx = 32
644 END IF
645 ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
646 IF( c3.EQ.'TRD' ) THEN
647 nx = 32
648 END IF
649 ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
650 IF( c3( 1: 1 ).EQ.'G' ) THEN
651 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
652 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
653 $ THEN
654 nx = 128
655 END IF
656 END IF
657 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
658 IF( c3( 1: 1 ).EQ.'G' ) THEN
659 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
660 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
661 $ THEN
662 nx = 128
663 END IF
664 END IF
665 ELSE IF( c2.EQ.'GG' ) THEN
666 nx = 128
667 IF( c3.EQ.'HD3' ) THEN
668 nx = 128
669 END IF
670 END IF
671 ilaenv = nx
672 RETURN
673*
674 80 CONTINUE
675*
676* ISPEC = 4: number of shifts (used by xHSEQR)
677*
678 ilaenv = 6
679 RETURN
680*
681 90 CONTINUE
682*
683* ISPEC = 5: minimum column dimension (not used)
684*
685 ilaenv = 2
686 RETURN
687*
688 100 CONTINUE
689*
690* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
691*
692 ilaenv = int( real( min( n1, n2 ) )*1.6e0 )
693 RETURN
694*
695 110 CONTINUE
696*
697* ISPEC = 7: number of processors (not used)
698*
699 ilaenv = 1
700 RETURN
701*
702 120 CONTINUE
703*
704* ISPEC = 8: crossover point for multishift (used by xHSEQR)
705*
706 ilaenv = 50
707 RETURN
708*
709 130 CONTINUE
710*
711* ISPEC = 9: maximum size of the subproblems at the bottom of the
712* computation tree in the divide-and-conquer algorithm
713* (used by xGELSD and xGESDD)
714*
715 ilaenv = 25
716 RETURN
717*
718 140 CONTINUE
719*
720* ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap
721*
722* ILAENV = 0
723 ilaenv = 1
724 IF( ilaenv.EQ.1 ) THEN
725 ilaenv = ieeeck( 1, 0.0, 1.0 )
726 END IF
727 RETURN
728*
729 150 CONTINUE
730*
731* ISPEC = 11: ieee infinity arithmetic can be trusted not to trap
732*
733* ILAENV = 0
734 ilaenv = 1
735 IF( ilaenv.EQ.1 ) THEN
736 ilaenv = ieeeck( 0, 0.0, 1.0 )
737 END IF
738 RETURN
739*
740 160 CONTINUE
741*
742* 12 <= ISPEC <= 17: xHSEQR or related subroutines.
743*
744 ilaenv = iparmq( ispec, name, opts, n1, n2, n3, n4 )
745 RETURN
746*
747* End of ILAENV
748*
749 END
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
integer function iparmq(ispec, name, opts, n, ilo, ihi, lwork)
IPARMQ
Definition iparmq.f:230