LAPACK  3.11.0
LAPACK: Linear Algebra PACKage
ilaenv.f
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  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 ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: ilaenv.f:162