 LAPACK 3.11.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches

## ◆ ilaenv()

 integer function ilaenv ( integer ISPEC, character*( * ) NAME, character*( * ) OPTS, integer N1, integer N2, integer N3, integer N4 )

ILAENV

Purpose:
``` ILAENV is called from the LAPACK routines to choose problem-dependent
parameters for the local environment.  See ISPEC for a description of
the parameters.

ILAENV returns an INTEGER
if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
if ILAENV < 0:  if ILAENV = -k, the k-th argument had an illegal value.

This version provides a set of parameters which should give good,
but not optimal, performance on many of the currently available
computers.  Users are encouraged to modify this subroutine to set
the tuning parameters for their particular machine using the option
and problem size information in the arguments.

This routine will not function correctly if it is converted to all
lower case.  Converting it to all upper case is allowed.```
Parameters
 [in] ISPEC ``` ISPEC is INTEGER Specifies the parameter to be returned as the value of ILAENV. = 1: the optimal blocksize; if this value is 1, an unblocked algorithm will give the best performance. = 2: the minimum block size for which the block routine should be used; if the usable block size is less than this value, an unblocked routine should be used. = 3: the crossover point (in a block routine, for N less than this value, an unblocked routine should be used) = 4: the number of shifts, used in the nonsymmetric eigenvalue routines (DEPRECATED) = 5: the minimum column dimension for blocking to be used; rectangular blocks must have dimension at least k by m, where k is given by ILAENV(2,...) and m by ILAENV(5,...) = 6: the crossover point for the SVD (when reducing an m by n matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds this value, a QR factorization is used first to reduce the matrix to a triangular form.) = 7: the number of processors = 8: the crossover point for the multishift QR method for nonsymmetric eigenvalue problems (DEPRECATED) = 9: maximum size of the subproblems at the bottom of the computation tree in the divide-and-conquer algorithm (used by xGELSD and xGESDD) =10: ieee infinity and NaN arithmetic can be trusted not to trap =11: infinity arithmetic can be trusted not to trap 12 <= ISPEC <= 17: xHSEQR or related subroutines, see IPARMQ for detailed explanation``` [in] NAME ``` NAME is CHARACTER*(*) The name of the calling subroutine, in either upper case or lower case.``` [in] OPTS ``` OPTS is CHARACTER*(*) The character options to the subroutine NAME, concatenated into a single character string. For example, UPLO = 'U', TRANS = 'T', and DIAG = 'N' for a triangular routine would be specified as OPTS = 'UTN'.``` [in] N1 ` N1 is INTEGER` [in] N2 ` N2 is INTEGER` [in] N3 ` N3 is INTEGER` [in] N4 ``` N4 is INTEGER Problem dimensions for the subroutine NAME; these may not all be required.```
Further Details:
```  The following conventions have been used when calling ILAENV from the
LAPACK routines:
1)  OPTS is a concatenation of all of the character options to
subroutine NAME, in the same order that they appear in the
argument list for NAME, even if they are not used in determining
the value of the parameter specified by ISPEC.
2)  The problem dimensions N1, N2, N3, N4 are specified in the order
that they appear in the argument list for NAME.  N1 is used
first, N2 second, and so on, and unused problem dimensions are
passed a value of -1.
3)  The parameter value returned by ILAENV is checked for validity in
the calling subroutine.  For example, ILAENV is used to retrieve
the optimal blocksize for STRTRI as follows:

NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
IF( NB.LE.1 ) NB = MAX( 1, N )```
Purpose:
``` ILAENV returns problem-dependent parameters for the local
environment.  See ISPEC for a description of the parameters.

In this version, the problem-dependent parameters are contained in
the integer array IPARMS in the common block CLAENV and the value
with index ISPEC is copied to ILAENV.  This version of ILAENV is
to be used in conjunction with XLAENV in TESTING and TIMING.```
Parameters
 [in] ISPEC ``` ISPEC is INTEGER Specifies the parameter to be returned as the value of ILAENV. = 1: the optimal blocksize; if this value is 1, an unblocked algorithm will give the best performance. = 2: the minimum block size for which the block routine should be used; if the usable block size is less than this value, an unblocked routine should be used. = 3: the crossover point (in a block routine, for N less than this value, an unblocked routine should be used) = 4: the number of shifts, used in the nonsymmetric eigenvalue routines = 5: the minimum column dimension for blocking to be used; rectangular blocks must have dimension at least k by m, where k is given by ILAENV(2,...) and m by ILAENV(5,...) = 6: the crossover point for the SVD (when reducing an m by n matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds this value, a QR factorization is used first to reduce the matrix to a triangular form.) = 7: the number of processors = 8: the crossover point for the multishift QR and QZ methods for nonsymmetric eigenvalue problems. = 9: maximum size of the subproblems at the bottom of the computation tree in the divide-and-conquer algorithm =10: ieee NaN arithmetic can be trusted not to trap =11: infinity arithmetic can be trusted not to trap 12 <= ISPEC <= 16: xHSEQR or one of its subroutines, see IPARMQ for detailed explanation Other specifications (up to 100) can be added later.``` [in] NAME ``` NAME is CHARACTER*(*) The name of the calling subroutine.``` [in] OPTS ``` OPTS is CHARACTER*(*) The character options to the subroutine NAME, concatenated into a single character string. For example, UPLO = 'U', TRANS = 'T', and DIAG = 'N' for a triangular routine would be specified as OPTS = 'UTN'.``` [in] N1 ` N1 is INTEGER` [in] N2 ` N2 is INTEGER` [in] N3 ` N3 is INTEGER` [in] N4 ``` N4 is INTEGER Problem dimensions for the subroutine NAME; these may not all be required.```
Returns
ILAENV
```          ILAENV is INTEGER
>= 0: the value of the parameter specified by ISPEC
< 0:  if ILAENV = -k, the k-th argument had an illegal value.```
Further Details:
```  The following conventions have been used when calling ILAENV from the
LAPACK routines:
1)  OPTS is a concatenation of all of the character options to
subroutine NAME, in the same order that they appear in the
argument list for NAME, even if they are not used in determining
the value of the parameter specified by ISPEC.
2)  The problem dimensions N1, N2, N3, N4 are specified in the order
that they appear in the argument list for NAME.  N1 is used
first, N2 second, and so on, and unused problem dimensions are
passed a value of -1.
3)  The parameter value returned by ILAENV is checked for validity in
the calling subroutine.  For example, ILAENV is used to retrieve
the optimal blocksize for STRTRI as follows:

NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
IF( NB.LE.1 ) NB = MAX( 1, N )```

Definition at line 161 of file ilaenv.f.

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*
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
Here is the call graph for this function:
Here is the caller graph for this function: