OpenRadioss 2025.1.11
OpenRadioss project
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.EQ. IF( SUBNAM(2:6)'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.EQ. ELSE IF( C2'ge' ) THEN
281.EQ. IF( C3'trf' ) THEN
282 IF( SNAME ) THEN
283 NB = 64
284 ELSE
285 NB = 64
286 END IF
287.EQ. ELSE IF( C3'qrf.OR..EQ.' C3'rqf.OR..EQ.' C3'lqf.OR.'
288.EQ. $ C3'qlf' ) THEN
289 IF( SNAME ) THEN
290 NB = 32
291 ELSE
292 NB = 32
293 END IF
294.EQ. ELSE IF( C3'qr ') THEN
295.EQ. IF( N3 1) THEN
296 IF( SNAME ) THEN
297* M*N
298.LE..OR..LE. IF ((N1*N2131072)(N18192)) THEN
299 NB = N1
300 ELSE
301 NB = 32768/N2
302 END IF
303 ELSE
304.LE..OR..LE. IF ((N1*N2131072)(N18192)) 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.EQ. ELSE IF( C3'lq ') THEN
318.EQ. IF( N3 2) THEN
319 IF( SNAME ) THEN
320* M*N
321.LE..OR..LE. IF ((N1*N2131072)(N18192)) THEN
322 NB = N1
323 ELSE
324 NB = 32768/N2
325 END IF
326 ELSE
327.LE..OR..LE. IF ((N1*N2131072)(N18192)) 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.EQ. ELSE IF( C3'hrd' ) THEN
341 IF( SNAME ) THEN
342 NB = 32
343 ELSE
344 NB = 32
345 END IF
346.EQ. ELSE IF( C3'brd' ) THEN
347 IF( SNAME ) THEN
348 NB = 32
349 ELSE
350 NB = 32
351 END IF
352.EQ. ELSE IF( C3'tri' ) THEN
353 IF( SNAME ) THEN
354 NB = 64
355 ELSE
356 NB = 64
357 END IF
358 END IF
359.EQ. ELSE IF( C2'po' ) THEN
360.EQ. IF( C3'trf' ) THEN
361 IF( SNAME ) THEN
362 NB = 64
363 ELSE
364 NB = 64
365 END IF
366 END IF
367.EQ. ELSE IF( C2'sy' ) THEN
368.EQ. IF( C3'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.AND..EQ. ELSE IF( SNAME C3'trd' ) THEN
383 NB = 32
384.AND..EQ. ELSE IF( SNAME C3'gst' ) THEN
385 NB = 64
386 END IF
387.AND..EQ. ELSE IF( CNAME C2'he' ) THEN
388.EQ. IF( C3'trf' ) THEN
389 IF( TWOSTAGE ) THEN
390 NB = 192
391 ELSE
392 NB = 64
393 END IF
394.EQ. ELSE IF( C3'trd' ) THEN
395 NB = 32
396.EQ. ELSE IF( C3'gst' ) THEN
397 NB = 64
398 END IF
399.AND..EQ. ELSE IF( SNAME C2'or' ) THEN
400.EQ. IF( C3( 1: 1 )'g' ) THEN
401.EQ. IF( C4'qr.OR..EQ.' C4'rq.OR..EQ.' C4'lq.OR..EQ.' C4
402 $ 'ql.OR..EQ.' C4'hr.OR..EQ.' C4'tr.OR..EQ.' C4'br' )
403 $ THEN
404 NB = 32
405 END IF
406.EQ. ELSE IF( C3( 1: 1 )'m' ) THEN
407.EQ. IF( C4'qr.OR..EQ.' C4'rq.OR..EQ.' C4'lq.OR..EQ.' C4
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..EQ.' C4'lq.OR..EQ.' C4
416 $ 'ql.OR..EQ.' C4'hr.OR..EQ.' C4'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 END IF
473 ELSE IF( c2.EQ.'LA' ) THEN
474 IF( c3.EQ.'UUM' ) THEN
475 IF( sname ) THEN
476 nb = 64
477 ELSE
478 nb = 64
479 END IF
480 END IF
481 ELSE IF( sname .AND. c2.EQ.'ST' ) THEN
482 IF( c3.EQ.'EBZ' ) THEN
483 nb = 1
484 END IF
485 ELSE IF( c2.EQ.'GG' ) THEN
486 nb = 32
487 IF( c3.EQ.'HD3' ) THEN
488 IF( sname ) THEN
489 nb = 32
490 ELSE
491 nb = 32
492 END IF
493 END IF
494 END IF
495 ilaenv = nb
496 RETURN
497*
498 60 CONTINUE
499*
500* ISPEC = 2: minimum block size
501*
502 nbmin = 2
503 IF( c2.EQ.'GE' ) THEN
504 IF( c3.EQ.'QRF' .OR. c3.EQ.'rqf.OR..EQ.' C3'lqf.OR..EQ.' C3
505 $ 'qlf' ) THEN
506 IF( SNAME ) THEN
507 NBMIN = 2
508 ELSE
509 NBMIN = 2
510 END IF
511.EQ. ELSE IF( C3'hrd' ) THEN
512 IF( SNAME ) THEN
513 NBMIN = 2
514 ELSE
515 NBMIN = 2
516 END IF
517.EQ. ELSE IF( C3'brd' ) THEN
518 IF( SNAME ) THEN
519 NBMIN = 2
520 ELSE
521 NBMIN = 2
522 END IF
523.EQ. ELSE IF( C3'tri' ) THEN
524 IF( SNAME ) THEN
525 NBMIN = 2
526 ELSE
527 NBMIN = 2
528 END IF
529 END IF
530.EQ. ELSE IF( C2'sy' ) THEN
531.EQ. IF( C3'trf' ) THEN
532 IF( SNAME ) THEN
533 NBMIN = 8
534 ELSE
535 NBMIN = 8
536 END IF
537.AND..EQ. ELSE IF( SNAME C3'trd' ) THEN
538 NBMIN = 2
539 END IF
540.AND..EQ. ELSE IF( CNAME C2'he' ) THEN
541.EQ. IF( C3'trd' ) THEN
542 NBMIN = 2
543 END IF
544.AND..EQ. ELSE IF( SNAME C2'or' ) THEN
545 IF( c3( 1: 1 ).EQ.'G' ) THEN
546 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
547 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
548 $ THEN
549 nbmin = 2
550 END IF
551 ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
552 IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
553 $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
554 $ THEN
555 nbmin = 2
556 END IF
557 END IF
558 ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
559 IF( c3( 1: 1 ).EQ.'g' ) THEN
560.EQ. IF( C4'qr.OR..EQ.' C4'rq.OR..EQ.' C4'lq.OR..EQ.' C4
561 $ 'ql.OR..EQ.' C4'hr.OR..EQ.' C4'tr.OR..EQ.' C4'br' )
562 $ THEN
563 NBMIN = 2
564 END IF
565.EQ. ELSE IF( C3( 1: 1 )'m' ) THEN
566.EQ. IF( C4'qr.OR..EQ.' C4'rq.OR..EQ.' C4'lq.OR..EQ.' C4
567 $ 'ql.OR..EQ.' C4'hr.OR..EQ.' C4'tr.OR..EQ.' C4'br' )
568 $ THEN
569 NBMIN = 2
570 END IF
571 END IF
572.EQ. ELSE IF( C2'gg' ) THEN
573 NBMIN = 2
574.EQ. IF( C3'hd3' ) THEN
575 NBMIN = 2
576 END IF
577 END IF
578 ILAENV = NBMIN
579 RETURN
580*
581 70 CONTINUE
582*
583* ISPEC = 3: crossover point
584*
585 NX = 0
586.EQ. IF( C2'ge' ) THEN
587.EQ. IF( C3'qrf.OR..EQ.' C3'rqf.OR..EQ.' C3'lqf.OR..EQ.' C3
588 $ 'qlf' ) THEN
589 IF( SNAME ) THEN
590 NX = 128
591 ELSE
592 NX = 128
593 END IF
594.EQ. ELSE IF( C3'hrd' ) THEN
595 IF( SNAME ) THEN
596 NX = 128
597 ELSE
598 NX = 128
599 END IF
600.EQ. ELSE IF( C3'brd' ) THEN
601 IF( SNAME ) THEN
602 NX = 128
603 ELSE
604 NX = 128
605 END IF
606 END IF
607.EQ. ELSE IF( C2'sy' ) THEN
608.AND..EQ. IF( SNAME C3'trd' ) THEN
609 NX = 32
610 END IF
611.AND..EQ. ELSE IF( CNAME C2'he' ) THEN
612.EQ. IF( C3'trd' ) THEN
613 NX = 32
614 END IF
615.AND..EQ. ELSE IF( SNAME C2'or' ) THEN
616.EQ. IF( C3( 1: 1 )'g' ) THEN
617.EQ. IF( C4'qr.OR..EQ.' C4'rq.OR..EQ.' C4'lq.OR..EQ.' C4
618 $ 'ql.OR..EQ.' C4'hr.OR..EQ.' C4'tr.OR..EQ.' C4'br' )
619 $ THEN
620 NX = 128
621 END IF
622 END IF
623.AND..EQ. ELSE IF( CNAME C2'un' ) THEN
624.EQ. IF( C3( 1: 1 )'g' ) THEN
625.EQ. IF( C4'qr.OR..EQ.' C4'rq.OR..EQ.' C4'lq.OR..EQ.' C4
626 $ 'ql.OR..EQ.' C4'hr.OR..EQ.' C4'tr.OR..EQ.' C4'br' )
627 $ THEN
628 NX = 128
629 END IF
630 END IF
631.EQ. ELSE IF( C2'gg' ) THEN
632 NX = 128
633.EQ. IF( C3'hd3' ) THEN
634 NX = 128
635 END IF
636 END IF
637 ILAENV = NX
638 RETURN
639*
640 80 CONTINUE
641*
642* ISPEC = 4: number of shifts (used by xHSEQR)
643*
644 ILAENV = 6
645 RETURN
646*
647 90 CONTINUE
648*
649* ISPEC = 5: minimum column dimension (not used)
650*
651 ILAENV = 2
652 RETURN
653*
654 100 CONTINUE
655*
656* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
657*
658 ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
659 RETURN
660*
661 110 CONTINUE
662*
663* ISPEC = 7: number of processors (not used)
664*
665 ILAENV = 1
666 RETURN
667*
668 120 CONTINUE
669*
670* ISPEC = 8: crossover point for multishift (used by xHSEQR)
671*
672 ILAENV = 50
673 RETURN
674*
675 130 CONTINUE
676*
677* ISPEC = 9: maximum size of the subproblems at the bottom of the
678* computation tree in the divide-and-conquer algorithm
679* (used by xGELSD and xGESDD)
680*
681 ILAENV = 25
682 RETURN
683*
684 140 CONTINUE
685*
686* ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap
687*
688* ILAENV = 0
689 ILAENV = 1
690.EQ. IF( ILAENV1 ) THEN
691 ILAENV = IEEECK( 1, 0.0, 1.0 )
692 END IF
693 RETURN
694*
695 150 CONTINUE
696*
697* ISPEC = 11: ieee infinity arithmetic can be trusted not to trap
698*
699* ILAENV = 0
700 ILAENV = 1
701.EQ. IF( ILAENV1 ) THEN
702 ILAENV = IEEECK( 0, 0.0, 1.0 )
703 END IF
704 RETURN
705*
706 160 CONTINUE
707*
708* 12 <= ISPEC <= 17: xHSEQR or related subroutines.
709*
710 ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
711 RETURN
712*
713* End of ILAENV
714*
715 END
integer function iparmq(ispec, name, opts, n, ilo, ihi, lwork)
IPARMQ
Definition iparmq.f:230
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV
Definition ilaenv.f:162
integer function ieeeck(ispec, zero, one)
IEEECK
Definition ieeeck.f:82
integer function iparam2stage(ispec, name, opts, ni, nbi, ibi, nxi)
IPARAM2STAGE
#define min(a, b)
Definition macros.h:20