LAPACK  3.8.0
LAPACK: Linear Algebra PACKage
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 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 2017
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.8.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 2017
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( c2.EQ.'GE' ) THEN
275  IF( c3.EQ.'TRF' ) THEN
276  IF( sname ) THEN
277  nb = 64
278  ELSE
279  nb = 64
280  END IF
281  ELSE IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR.
282  $ c3.EQ.'QLF' ) THEN
283  IF( sname ) THEN
284  nb = 32
285  ELSE
286  nb = 32
287  END IF
288  ELSE IF( c3.EQ.'QR ') THEN
289  IF( n3 .EQ. 1) THEN
290  IF( sname ) THEN
291 * M*N
292  IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
293  nb = n1
294  ELSE
295  nb = 32768/n2
296  END IF
297  ELSE
298  IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
299  nb = n1
300  ELSE
301  nb = 32768/n2
302  END IF
303  END IF
304  ELSE
305  IF( sname ) THEN
306  nb = 1
307  ELSE
308  nb = 1
309  END IF
310  END IF
311  ELSE IF( c3.EQ.'LQ ') THEN
312  IF( n3 .EQ. 2) THEN
313  IF( sname ) THEN
314 * M*N
315  IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
316  nb = n1
317  ELSE
318  nb = 32768/n2
319  END IF
320  ELSE
321  IF ((n1*n2.LE.131072).OR.(n1.LE.8192)) THEN
322  nb = n1
323  ELSE
324  nb = 32768/n2
325  END IF
326  END IF
327  ELSE
328  IF( sname ) THEN
329  nb = 1
330  ELSE
331  nb = 1
332  END IF
333  END IF
334  ELSE IF( c3.EQ.'HRD' ) THEN
335  IF( sname ) THEN
336  nb = 32
337  ELSE
338  nb = 32
339  END IF
340  ELSE IF( c3.EQ.'BRD' ) THEN
341  IF( sname ) THEN
342  nb = 32
343  ELSE
344  nb = 32
345  END IF
346  ELSE IF( c3.EQ.'TRI' ) THEN
347  IF( sname ) THEN
348  nb = 64
349  ELSE
350  nb = 64
351  END IF
352  END IF
353  ELSE IF( c2.EQ.'PO' ) THEN
354  IF( c3.EQ.'TRF' ) THEN
355  IF( sname ) THEN
356  nb = 64
357  ELSE
358  nb = 64
359  END IF
360  END IF
361  ELSE IF( c2.EQ.'SY' ) THEN
362  IF( c3.EQ.'TRF' ) THEN
363  IF( sname ) THEN
364  IF( twostage ) THEN
365  nb = 192
366  ELSE
367  nb = 64
368  END IF
369  ELSE
370  IF( twostage ) THEN
371  nb = 192
372  ELSE
373  nb = 64
374  END IF
375  END IF
376  ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
377  nb = 32
378  ELSE IF( sname .AND. c3.EQ.'GST' ) THEN
379  nb = 64
380  END IF
381  ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
382  IF( c3.EQ.'TRF' ) THEN
383  IF( twostage ) THEN
384  nb = 192
385  ELSE
386  nb = 64
387  END IF
388  ELSE IF( c3.EQ.'TRD' ) THEN
389  nb = 32
390  ELSE IF( c3.EQ.'GST' ) THEN
391  nb = 64
392  END IF
393  ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
394  IF( c3( 1: 1 ).EQ.'G' ) THEN
395  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
396  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
397  $ THEN
398  nb = 32
399  END IF
400  ELSE IF( c3( 1: 1 ).EQ.'M' ) 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  END IF
407  ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
408  IF( c3( 1: 1 ).EQ.'G' ) THEN
409  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
410  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
411  $ THEN
412  nb = 32
413  END IF
414  ELSE IF( c3( 1: 1 ).EQ.'M' ) 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  END IF
421  ELSE IF( c2.EQ.'GB' ) THEN
422  IF( c3.EQ.'TRF' ) THEN
423  IF( sname ) THEN
424  IF( n4.LE.64 ) THEN
425  nb = 1
426  ELSE
427  nb = 32
428  END IF
429  ELSE
430  IF( n4.LE.64 ) THEN
431  nb = 1
432  ELSE
433  nb = 32
434  END IF
435  END IF
436  END IF
437  ELSE IF( c2.EQ.'PB' ) THEN
438  IF( c3.EQ.'TRF' ) THEN
439  IF( sname ) THEN
440  IF( n2.LE.64 ) THEN
441  nb = 1
442  ELSE
443  nb = 32
444  END IF
445  ELSE
446  IF( n2.LE.64 ) THEN
447  nb = 1
448  ELSE
449  nb = 32
450  END IF
451  END IF
452  END IF
453  ELSE IF( c2.EQ.'TR' ) THEN
454  IF( c3.EQ.'TRI' ) THEN
455  IF( sname ) THEN
456  nb = 64
457  ELSE
458  nb = 64
459  END IF
460  ELSE IF ( c3.EQ.'EVC' ) THEN
461  IF( sname ) THEN
462  nb = 64
463  ELSE
464  nb = 64
465  END IF
466  END IF
467  ELSE IF( c2.EQ.'LA' ) THEN
468  IF( c3.EQ.'UUM' ) THEN
469  IF( sname ) THEN
470  nb = 64
471  ELSE
472  nb = 64
473  END IF
474  END IF
475  ELSE IF( sname .AND. c2.EQ.'ST' ) THEN
476  IF( c3.EQ.'EBZ' ) THEN
477  nb = 1
478  END IF
479  ELSE IF( c2.EQ.'GG' ) THEN
480  nb = 32
481  IF( c3.EQ.'HD3' ) THEN
482  IF( sname ) THEN
483  nb = 32
484  ELSE
485  nb = 32
486  END IF
487  END IF
488  END IF
489  ilaenv = nb
490  RETURN
491 *
492  60 CONTINUE
493 *
494 * ISPEC = 2: minimum block size
495 *
496  nbmin = 2
497  IF( c2.EQ.'GE' ) THEN
498  IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
499  $ 'QLF' ) THEN
500  IF( sname ) THEN
501  nbmin = 2
502  ELSE
503  nbmin = 2
504  END IF
505  ELSE IF( c3.EQ.'HRD' ) THEN
506  IF( sname ) THEN
507  nbmin = 2
508  ELSE
509  nbmin = 2
510  END IF
511  ELSE IF( c3.EQ.'BRD' ) THEN
512  IF( sname ) THEN
513  nbmin = 2
514  ELSE
515  nbmin = 2
516  END IF
517  ELSE IF( c3.EQ.'TRI' ) THEN
518  IF( sname ) THEN
519  nbmin = 2
520  ELSE
521  nbmin = 2
522  END IF
523  END IF
524  ELSE IF( c2.EQ.'SY' ) THEN
525  IF( c3.EQ.'TRF' ) THEN
526  IF( sname ) THEN
527  nbmin = 8
528  ELSE
529  nbmin = 8
530  END IF
531  ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
532  nbmin = 2
533  END IF
534  ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
535  IF( c3.EQ.'TRD' ) THEN
536  nbmin = 2
537  END IF
538  ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
539  IF( c3( 1: 1 ).EQ.'G' ) THEN
540  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
541  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
542  $ THEN
543  nbmin = 2
544  END IF
545  ELSE IF( c3( 1: 1 ).EQ.'M' ) 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  END IF
552  ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
553  IF( c3( 1: 1 ).EQ.'G' ) THEN
554  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
555  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
556  $ THEN
557  nbmin = 2
558  END IF
559  ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
560  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
561  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
562  $ THEN
563  nbmin = 2
564  END IF
565  END IF
566  ELSE IF( c2.EQ.'GG' ) THEN
567  nbmin = 2
568  IF( c3.EQ.'HD3' ) THEN
569  nbmin = 2
570  END IF
571  END IF
572  ilaenv = nbmin
573  RETURN
574 *
575  70 CONTINUE
576 *
577 * ISPEC = 3: crossover point
578 *
579  nx = 0
580  IF( c2.EQ.'GE' ) THEN
581  IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
582  $ 'QLF' ) THEN
583  IF( sname ) THEN
584  nx = 128
585  ELSE
586  nx = 128
587  END IF
588  ELSE IF( c3.EQ.'HRD' ) THEN
589  IF( sname ) THEN
590  nx = 128
591  ELSE
592  nx = 128
593  END IF
594  ELSE IF( c3.EQ.'BRD' ) THEN
595  IF( sname ) THEN
596  nx = 128
597  ELSE
598  nx = 128
599  END IF
600  END IF
601  ELSE IF( c2.EQ.'SY' ) THEN
602  IF( sname .AND. c3.EQ.'TRD' ) THEN
603  nx = 32
604  END IF
605  ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
606  IF( c3.EQ.'TRD' ) THEN
607  nx = 32
608  END IF
609  ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
610  IF( c3( 1: 1 ).EQ.'G' ) THEN
611  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
612  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
613  $ THEN
614  nx = 128
615  END IF
616  END IF
617  ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
618  IF( c3( 1: 1 ).EQ.'G' ) THEN
619  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
620  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
621  $ THEN
622  nx = 128
623  END IF
624  END IF
625  ELSE IF( c2.EQ.'GG' ) THEN
626  nx = 128
627  IF( c3.EQ.'HD3' ) THEN
628  nx = 128
629  END IF
630  END IF
631  ilaenv = nx
632  RETURN
633 *
634  80 CONTINUE
635 *
636 * ISPEC = 4: number of shifts (used by xHSEQR)
637 *
638  ilaenv = 6
639  RETURN
640 *
641  90 CONTINUE
642 *
643 * ISPEC = 5: minimum column dimension (not used)
644 *
645  ilaenv = 2
646  RETURN
647 *
648  100 CONTINUE
649 *
650 * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
651 *
652  ilaenv = int( REAL( MIN( N1, N2 ) )*1.6e0 )
653  RETURN
654 *
655  110 CONTINUE
656 *
657 * ISPEC = 7: number of processors (not used)
658 *
659  ilaenv = 1
660  RETURN
661 *
662  120 CONTINUE
663 *
664 * ISPEC = 8: crossover point for multishift (used by xHSEQR)
665 *
666  ilaenv = 50
667  RETURN
668 *
669  130 CONTINUE
670 *
671 * ISPEC = 9: maximum size of the subproblems at the bottom of the
672 * computation tree in the divide-and-conquer algorithm
673 * (used by xGELSD and xGESDD)
674 *
675  ilaenv = 25
676  RETURN
677 *
678  140 CONTINUE
679 *
680 * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
681 *
682 * ILAENV = 0
683  ilaenv = 1
684  IF( ilaenv.EQ.1 ) THEN
685  ilaenv = ieeeck( 1, 0.0, 1.0 )
686  END IF
687  RETURN
688 *
689  150 CONTINUE
690 *
691 * ISPEC = 11: infinity arithmetic can be trusted not to trap
692 *
693 * ILAENV = 0
694  ilaenv = 1
695  IF( ilaenv.EQ.1 ) THEN
696  ilaenv = ieeeck( 0, 0.0, 1.0 )
697  END IF
698  RETURN
699 *
700  160 CONTINUE
701 *
702 * 12 <= ISPEC <= 16: xHSEQR or related subroutines.
703 *
704  ilaenv = iparmq( ispec, name, opts, n1, n2, n3, n4 )
705  RETURN
706 *
707 * End of ILAENV
708 *
709  END
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: tstiee.f:83