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 2015
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.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 2015
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: END IF
401: ELSE IF( C2.EQ.'LA' ) THEN
402: IF( C3.EQ.'UUM' ) THEN
403: IF( SNAME ) THEN
404: NB = 64
405: ELSE
406: NB = 64
407: END IF
408: END IF
409: ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
410: IF( C3.EQ.'EBZ' ) THEN
411: NB = 1
412: END IF
413: ELSE IF( C2.EQ.'GG' ) THEN
414: NB = 32
415: IF( C3.EQ.'HD3' ) THEN
416: IF( SNAME ) THEN
417: NB = 32
418: ELSE
419: NB = 32
420: END IF
421: END IF
422: END IF
423: ILAENV = NB
424: RETURN
425: *
426: 60 CONTINUE
427: *
428: * ISPEC = 2: minimum block size
429: *
430: NBMIN = 2
431: IF( C2.EQ.'GE' ) THEN
432: IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
433: $ 'QLF' ) THEN
434: IF( SNAME ) THEN
435: NBMIN = 2
436: ELSE
437: NBMIN = 2
438: END IF
439: ELSE IF( C3.EQ.'HRD' ) THEN
440: IF( SNAME ) THEN
441: NBMIN = 2
442: ELSE
443: NBMIN = 2
444: END IF
445: ELSE IF( C3.EQ.'BRD' ) THEN
446: IF( SNAME ) THEN
447: NBMIN = 2
448: ELSE
449: NBMIN = 2
450: END IF
451: ELSE IF( C3.EQ.'TRI' ) THEN
452: IF( SNAME ) THEN
453: NBMIN = 2
454: ELSE
455: NBMIN = 2
456: END IF
457: END IF
458: ELSE IF( C2.EQ.'SY' ) THEN
459: IF( C3.EQ.'TRF' ) THEN
460: IF( SNAME ) THEN
461: NBMIN = 8
462: ELSE
463: NBMIN = 8
464: END IF
465: ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
466: NBMIN = 2
467: END IF
468: ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
469: IF( C3.EQ.'TRD' ) THEN
470: NBMIN = 2
471: END IF
472: ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
473: IF( C3( 1: 1 ).EQ.'G' ) THEN
474: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
475: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
476: $ THEN
477: NBMIN = 2
478: END IF
479: ELSE IF( C3( 1: 1 ).EQ.'M' ) 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: END IF
486: ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
487: IF( C3( 1: 1 ).EQ.'G' ) THEN
488: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
489: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
490: $ THEN
491: NBMIN = 2
492: END IF
493: ELSE IF( C3( 1: 1 ).EQ.'M' ) 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: END IF
500: ELSE IF( C2.EQ.'GG' ) THEN
501: NBMIN = 2
502: IF( C3.EQ.'HD3' ) THEN
503: NBMIN = 2
504: END IF
505: END IF
506: ILAENV = NBMIN
507: RETURN
508: *
509: 70 CONTINUE
510: *
511: * ISPEC = 3: crossover point
512: *
513: NX = 0
514: IF( C2.EQ.'GE' ) THEN
515: IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
516: $ 'QLF' ) THEN
517: IF( SNAME ) THEN
518: NX = 128
519: ELSE
520: NX = 128
521: END IF
522: ELSE IF( C3.EQ.'HRD' ) THEN
523: IF( SNAME ) THEN
524: NX = 128
525: ELSE
526: NX = 128
527: END IF
528: ELSE IF( C3.EQ.'BRD' ) THEN
529: IF( SNAME ) THEN
530: NX = 128
531: ELSE
532: NX = 128
533: END IF
534: END IF
535: ELSE IF( C2.EQ.'SY' ) THEN
536: IF( SNAME .AND. C3.EQ.'TRD' ) THEN
537: NX = 32
538: END IF
539: ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
540: IF( C3.EQ.'TRD' ) THEN
541: NX = 32
542: END IF
543: ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
544: IF( C3( 1: 1 ).EQ.'G' ) THEN
545: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
546: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
547: $ THEN
548: NX = 128
549: END IF
550: END IF
551: ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
552: IF( C3( 1: 1 ).EQ.'G' ) THEN
553: IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
554: $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
555: $ THEN
556: NX = 128
557: END IF
558: END IF
559: ELSE IF( C2.EQ.'GG' ) THEN
560: NX = 128
561: IF( C3.EQ.'HD3' ) THEN
562: NX = 128
563: END IF
564: END IF
565: ILAENV = NX
566: RETURN
567: *
568: 80 CONTINUE
569: *
570: * ISPEC = 4: number of shifts (used by xHSEQR)
571: *
572: ILAENV = 6
573: RETURN
574: *
575: 90 CONTINUE
576: *
577: * ISPEC = 5: minimum column dimension (not used)
578: *
579: ILAENV = 2
580: RETURN
581: *
582: 100 CONTINUE
583: *
584: * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
585: *
586: ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
587: RETURN
588: *
589: 110 CONTINUE
590: *
591: * ISPEC = 7: number of processors (not used)
592: *
593: ILAENV = 1
594: RETURN
595: *
596: 120 CONTINUE
597: *
598: * ISPEC = 8: crossover point for multishift (used by xHSEQR)
599: *
600: ILAENV = 50
601: RETURN
602: *
603: 130 CONTINUE
604: *
605: * ISPEC = 9: maximum size of the subproblems at the bottom of the
606: * computation tree in the divide-and-conquer algorithm
607: * (used by xGELSD and xGESDD)
608: *
609: ILAENV = 25
610: RETURN
611: *
612: 140 CONTINUE
613: *
614: * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
615: *
616: * ILAENV = 0
617: ILAENV = 1
618: IF( ILAENV.EQ.1 ) THEN
619: ILAENV = IEEECK( 1, 0.0, 1.0 )
620: END IF
621: RETURN
622: *
623: 150 CONTINUE
624: *
625: * ISPEC = 11: infinity arithmetic can be trusted not to trap
626: *
627: * ILAENV = 0
628: ILAENV = 1
629: IF( ILAENV.EQ.1 ) THEN
630: ILAENV = IEEECK( 0, 0.0, 1.0 )
631: END IF
632: RETURN
633: *
634: 160 CONTINUE
635: *
636: * 12 <= ISPEC <= 16: xHSEQR or related subroutines.
637: *
638: ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
639: RETURN
640: *
641: * End of ILAENV
642: *
643: END
CVSweb interface <joel.bertrand@systella.fr>