LAPACK  3.6.1
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 June 2016
136 *
137 *> \ingroup auxOTHERauxiliary
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.6.1) --
166 * -- LAPACK is a software package provided by Univ. of Tennessee, --
167 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
168 * June 2016
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
180  CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6
181 * ..
182 * .. Intrinsic Functions ..
183  INTRINSIC char, ichar, int, min, real
184 * ..
185 * .. External Functions ..
186  INTEGER IEEECK, IPARMQ
187  EXTERNAL ieeeck, iparmq
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 *
260  GO TO ( 50, 60, 70 )ispec
261 *
262  50 CONTINUE
263 *
264 * ISPEC = 1: block size
265 *
266 * In these examples, separate code is provided for setting NB for
267 * real and complex. We assume that NB will take the same value in
268 * single or double precision.
269 *
270  nb = 1
271 *
272  IF( c2.EQ.'GE' ) THEN
273  IF( c3.EQ.'TRF' ) THEN
274  IF( sname ) THEN
275  nb = 64
276  ELSE
277  nb = 64
278  END IF
279  ELSE IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR.
280  $ c3.EQ.'QLF' ) THEN
281  IF( sname ) THEN
282  nb = 32
283  ELSE
284  nb = 32
285  END IF
286  ELSE IF( c3.EQ.'HRD' ) THEN
287  IF( sname ) THEN
288  nb = 32
289  ELSE
290  nb = 32
291  END IF
292  ELSE IF( c3.EQ.'BRD' ) THEN
293  IF( sname ) THEN
294  nb = 32
295  ELSE
296  nb = 32
297  END IF
298  ELSE IF( c3.EQ.'TRI' ) THEN
299  IF( sname ) THEN
300  nb = 64
301  ELSE
302  nb = 64
303  END IF
304  END IF
305  ELSE IF( c2.EQ.'PO' ) THEN
306  IF( c3.EQ.'TRF' ) THEN
307  IF( sname ) THEN
308  nb = 64
309  ELSE
310  nb = 64
311  END IF
312  END IF
313  ELSE IF( c2.EQ.'SY' ) THEN
314  IF( c3.EQ.'TRF' ) THEN
315  IF( sname ) THEN
316  nb = 64
317  ELSE
318  nb = 64
319  END IF
320  ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
321  nb = 32
322  ELSE IF( sname .AND. c3.EQ.'GST' ) THEN
323  nb = 64
324  END IF
325  ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
326  IF( c3.EQ.'TRF' ) THEN
327  nb = 64
328  ELSE IF( c3.EQ.'TRD' ) THEN
329  nb = 32
330  ELSE IF( c3.EQ.'GST' ) THEN
331  nb = 64
332  END IF
333  ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
334  IF( c3( 1: 1 ).EQ.'G' ) THEN
335  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
336  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
337  $ THEN
338  nb = 32
339  END IF
340  ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
341  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
342  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
343  $ THEN
344  nb = 32
345  END IF
346  END IF
347  ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
348  IF( c3( 1: 1 ).EQ.'G' ) THEN
349  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
350  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
351  $ THEN
352  nb = 32
353  END IF
354  ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
355  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
356  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
357  $ THEN
358  nb = 32
359  END IF
360  END IF
361  ELSE IF( c2.EQ.'GB' ) THEN
362  IF( c3.EQ.'TRF' ) THEN
363  IF( sname ) THEN
364  IF( n4.LE.64 ) THEN
365  nb = 1
366  ELSE
367  nb = 32
368  END IF
369  ELSE
370  IF( n4.LE.64 ) THEN
371  nb = 1
372  ELSE
373  nb = 32
374  END IF
375  END IF
376  END IF
377  ELSE IF( c2.EQ.'PB' ) THEN
378  IF( c3.EQ.'TRF' ) THEN
379  IF( sname ) THEN
380  IF( n2.LE.64 ) THEN
381  nb = 1
382  ELSE
383  nb = 32
384  END IF
385  ELSE
386  IF( n2.LE.64 ) THEN
387  nb = 1
388  ELSE
389  nb = 32
390  END IF
391  END IF
392  END IF
393  ELSE IF( c2.EQ.'TR' ) THEN
394  IF( c3.EQ.'TRI' ) THEN
395  IF( sname ) THEN
396  nb = 64
397  ELSE
398  nb = 64
399  END IF
400  ELSE IF ( c3.EQ.'EVC' ) THEN
401  IF( sname ) THEN
402  nb = 64
403  ELSE
404  nb = 64
405  END IF
406  END IF
407  ELSE IF( c2.EQ.'LA' ) THEN
408  IF( c3.EQ.'UUM' ) THEN
409  IF( sname ) THEN
410  nb = 64
411  ELSE
412  nb = 64
413  END IF
414  END IF
415  ELSE IF( sname .AND. c2.EQ.'ST' ) THEN
416  IF( c3.EQ.'EBZ' ) THEN
417  nb = 1
418  END IF
419  ELSE IF( c2.EQ.'GG' ) THEN
420  nb = 32
421  IF( c3.EQ.'HD3' ) THEN
422  IF( sname ) THEN
423  nb = 32
424  ELSE
425  nb = 32
426  END IF
427  END IF
428  END IF
429  ilaenv = nb
430  RETURN
431 *
432  60 CONTINUE
433 *
434 * ISPEC = 2: minimum block size
435 *
436  nbmin = 2
437  IF( c2.EQ.'GE' ) THEN
438  IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
439  $ 'QLF' ) THEN
440  IF( sname ) THEN
441  nbmin = 2
442  ELSE
443  nbmin = 2
444  END IF
445  ELSE IF( c3.EQ.'HRD' ) THEN
446  IF( sname ) THEN
447  nbmin = 2
448  ELSE
449  nbmin = 2
450  END IF
451  ELSE IF( c3.EQ.'BRD' ) THEN
452  IF( sname ) THEN
453  nbmin = 2
454  ELSE
455  nbmin = 2
456  END IF
457  ELSE IF( c3.EQ.'TRI' ) THEN
458  IF( sname ) THEN
459  nbmin = 2
460  ELSE
461  nbmin = 2
462  END IF
463  END IF
464  ELSE IF( c2.EQ.'SY' ) THEN
465  IF( c3.EQ.'TRF' ) THEN
466  IF( sname ) THEN
467  nbmin = 8
468  ELSE
469  nbmin = 8
470  END IF
471  ELSE IF( sname .AND. c3.EQ.'TRD' ) THEN
472  nbmin = 2
473  END IF
474  ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
475  IF( c3.EQ.'TRD' ) THEN
476  nbmin = 2
477  END IF
478  ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
479  IF( c3( 1: 1 ).EQ.'G' ) THEN
480  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
481  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
482  $ THEN
483  nbmin = 2
484  END IF
485  ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
486  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
487  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
488  $ THEN
489  nbmin = 2
490  END IF
491  END IF
492  ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
493  IF( c3( 1: 1 ).EQ.'G' ) THEN
494  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
495  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
496  $ THEN
497  nbmin = 2
498  END IF
499  ELSE IF( c3( 1: 1 ).EQ.'M' ) THEN
500  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
501  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
502  $ THEN
503  nbmin = 2
504  END IF
505  END IF
506  ELSE IF( c2.EQ.'GG' ) THEN
507  nbmin = 2
508  IF( c3.EQ.'HD3' ) THEN
509  nbmin = 2
510  END IF
511  END IF
512  ilaenv = nbmin
513  RETURN
514 *
515  70 CONTINUE
516 *
517 * ISPEC = 3: crossover point
518 *
519  nx = 0
520  IF( c2.EQ.'GE' ) THEN
521  IF( c3.EQ.'QRF' .OR. c3.EQ.'RQF' .OR. c3.EQ.'LQF' .OR. c3.EQ.
522  $ 'QLF' ) THEN
523  IF( sname ) THEN
524  nx = 128
525  ELSE
526  nx = 128
527  END IF
528  ELSE IF( c3.EQ.'HRD' ) THEN
529  IF( sname ) THEN
530  nx = 128
531  ELSE
532  nx = 128
533  END IF
534  ELSE IF( c3.EQ.'BRD' ) THEN
535  IF( sname ) THEN
536  nx = 128
537  ELSE
538  nx = 128
539  END IF
540  END IF
541  ELSE IF( c2.EQ.'SY' ) THEN
542  IF( sname .AND. c3.EQ.'TRD' ) THEN
543  nx = 32
544  END IF
545  ELSE IF( cname .AND. c2.EQ.'HE' ) THEN
546  IF( c3.EQ.'TRD' ) THEN
547  nx = 32
548  END IF
549  ELSE IF( sname .AND. c2.EQ.'OR' ) THEN
550  IF( c3( 1: 1 ).EQ.'G' ) THEN
551  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
552  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
553  $ THEN
554  nx = 128
555  END IF
556  END IF
557  ELSE IF( cname .AND. c2.EQ.'UN' ) THEN
558  IF( c3( 1: 1 ).EQ.'G' ) THEN
559  IF( c4.EQ.'QR' .OR. c4.EQ.'RQ' .OR. c4.EQ.'LQ' .OR. c4.EQ.
560  $ 'QL' .OR. c4.EQ.'HR' .OR. c4.EQ.'TR' .OR. c4.EQ.'BR' )
561  $ THEN
562  nx = 128
563  END IF
564  END IF
565  ELSE IF( c2.EQ.'GG' ) THEN
566  nx = 128
567  IF( c3.EQ.'HD3' ) THEN
568  nx = 128
569  END IF
570  END IF
571  ilaenv = nx
572  RETURN
573 *
574  80 CONTINUE
575 *
576 * ISPEC = 4: number of shifts (used by xHSEQR)
577 *
578  ilaenv = 6
579  RETURN
580 *
581  90 CONTINUE
582 *
583 * ISPEC = 5: minimum column dimension (not used)
584 *
585  ilaenv = 2
586  RETURN
587 *
588  100 CONTINUE
589 *
590 * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
591 *
592  ilaenv = int( REAL( MIN( N1, N2 ) )*1.6e0 )
593  RETURN
594 *
595  110 CONTINUE
596 *
597 * ISPEC = 7: number of processors (not used)
598 *
599  ilaenv = 1
600  RETURN
601 *
602  120 CONTINUE
603 *
604 * ISPEC = 8: crossover point for multishift (used by xHSEQR)
605 *
606  ilaenv = 50
607  RETURN
608 *
609  130 CONTINUE
610 *
611 * ISPEC = 9: maximum size of the subproblems at the bottom of the
612 * computation tree in the divide-and-conquer algorithm
613 * (used by xGELSD and xGESDD)
614 *
615  ilaenv = 25
616  RETURN
617 *
618  140 CONTINUE
619 *
620 * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
621 *
622 * ILAENV = 0
623  ilaenv = 1
624  IF( ilaenv.EQ.1 ) THEN
625  ilaenv = ieeeck( 1, 0.0, 1.0 )
626  END IF
627  RETURN
628 *
629  150 CONTINUE
630 *
631 * ISPEC = 11: infinity arithmetic can be trusted not to trap
632 *
633 * ILAENV = 0
634  ilaenv = 1
635  IF( ilaenv.EQ.1 ) THEN
636  ilaenv = ieeeck( 0, 0.0, 1.0 )
637  END IF
638  RETURN
639 *
640  160 CONTINUE
641 *
642 * 12 <= ISPEC <= 16: xHSEQR or related subroutines.
643 *
644  ilaenv = iparmq( ispec, name, opts, n1, n2, n3, n4 )
645  RETURN
646 *
647 * End of ILAENV
648 *
649  END
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
Definition: tstiee.f:83