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