Statistiques
| Révision :

root / src / lapack / util / ilaenv.f @ 7

Historique | Voir | Annoter | Télécharger (16,36 ko)

1 1 pfleura2
      INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
2 1 pfleura2
*
3 1 pfleura2
*  -- LAPACK auxiliary routine (version 3.2.1)                        --
4 1 pfleura2
*
5 1 pfleura2
*  -- April 2009                                                      --
6 1 pfleura2
*
7 1 pfleura2
*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
8 1 pfleura2
*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
9 1 pfleura2
*
10 1 pfleura2
*     .. Scalar Arguments ..
11 1 pfleura2
      CHARACTER*( * )    NAME, OPTS
12 1 pfleura2
      INTEGER            ISPEC, N1, N2, N3, N4
13 1 pfleura2
*     ..
14 1 pfleura2
*
15 1 pfleura2
*  Purpose
16 1 pfleura2
*  =======
17 1 pfleura2
*
18 1 pfleura2
*  ILAENV is called from the LAPACK routines to choose problem-dependent
19 1 pfleura2
*  parameters for the local environment.  See ISPEC for a description of
20 1 pfleura2
*  the parameters.
21 1 pfleura2
*
22 1 pfleura2
*  ILAENV returns an INTEGER
23 1 pfleura2
*  if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
24 1 pfleura2
*  if ILAENV < 0:  if ILAENV = -k, the k-th argument had an illegal value.
25 1 pfleura2
*
26 1 pfleura2
*  This version provides a set of parameters which should give good,
27 1 pfleura2
*  but not optimal, performance on many of the currently available
28 1 pfleura2
*  computers.  Users are encouraged to modify this subroutine to set
29 1 pfleura2
*  the tuning parameters for their particular machine using the option
30 1 pfleura2
*  and problem size information in the arguments.
31 1 pfleura2
*
32 1 pfleura2
*  This routine will not function correctly if it is converted to all
33 1 pfleura2
*  lower case.  Converting it to all upper case is allowed.
34 1 pfleura2
*
35 1 pfleura2
*  Arguments
36 1 pfleura2
*  =========
37 1 pfleura2
*
38 1 pfleura2
*  ISPEC   (input) INTEGER
39 1 pfleura2
*          Specifies the parameter to be returned as the value of
40 1 pfleura2
*          ILAENV.
41 1 pfleura2
*          = 1: the optimal blocksize; if this value is 1, an unblocked
42 1 pfleura2
*               algorithm will give the best performance.
43 1 pfleura2
*          = 2: the minimum block size for which the block routine
44 1 pfleura2
*               should be used; if the usable block size is less than
45 1 pfleura2
*               this value, an unblocked routine should be used.
46 1 pfleura2
*          = 3: the crossover point (in a block routine, for N less
47 1 pfleura2
*               than this value, an unblocked routine should be used)
48 1 pfleura2
*          = 4: the number of shifts, used in the nonsymmetric
49 1 pfleura2
*               eigenvalue routines (DEPRECATED)
50 1 pfleura2
*          = 5: the minimum column dimension for blocking to be used;
51 1 pfleura2
*               rectangular blocks must have dimension at least k by m,
52 1 pfleura2
*               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
53 1 pfleura2
*          = 6: the crossover point for the SVD (when reducing an m by n
54 1 pfleura2
*               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
55 1 pfleura2
*               this value, a QR factorization is used first to reduce
56 1 pfleura2
*               the matrix to a triangular form.)
57 1 pfleura2
*          = 7: the number of processors
58 1 pfleura2
*          = 8: the crossover point for the multishift QR method
59 1 pfleura2
*               for nonsymmetric eigenvalue problems (DEPRECATED)
60 1 pfleura2
*          = 9: maximum size of the subproblems at the bottom of the
61 1 pfleura2
*               computation tree in the divide-and-conquer algorithm
62 1 pfleura2
*               (used by xGELSD and xGESDD)
63 1 pfleura2
*          =10: ieee NaN arithmetic can be trusted not to trap
64 1 pfleura2
*          =11: infinity arithmetic can be trusted not to trap
65 1 pfleura2
*          12 <= ISPEC <= 16:
66 1 pfleura2
*               xHSEQR or one of its subroutines,
67 1 pfleura2
*               see IPARMQ for detailed explanation
68 1 pfleura2
*
69 1 pfleura2
*  NAME    (input) CHARACTER*(*)
70 1 pfleura2
*          The name of the calling subroutine, in either upper case or
71 1 pfleura2
*          lower case.
72 1 pfleura2
*
73 1 pfleura2
*  OPTS    (input) CHARACTER*(*)
74 1 pfleura2
*          The character options to the subroutine NAME, concatenated
75 1 pfleura2
*          into a single character string.  For example, UPLO = 'U',
76 1 pfleura2
*          TRANS = 'T', and DIAG = 'N' for a triangular routine would
77 1 pfleura2
*          be specified as OPTS = 'UTN'.
78 1 pfleura2
*
79 1 pfleura2
*  N1      (input) INTEGER
80 1 pfleura2
*  N2      (input) INTEGER
81 1 pfleura2
*  N3      (input) INTEGER
82 1 pfleura2
*  N4      (input) INTEGER
83 1 pfleura2
*          Problem dimensions for the subroutine NAME; these may not all
84 1 pfleura2
*          be required.
85 1 pfleura2
*
86 1 pfleura2
*  Further Details
87 1 pfleura2
*  ===============
88 1 pfleura2
*
89 1 pfleura2
*  The following conventions have been used when calling ILAENV from the
90 1 pfleura2
*  LAPACK routines:
91 1 pfleura2
*  1)  OPTS is a concatenation of all of the character options to
92 1 pfleura2
*      subroutine NAME, in the same order that they appear in the
93 1 pfleura2
*      argument list for NAME, even if they are not used in determining
94 1 pfleura2
*      the value of the parameter specified by ISPEC.
95 1 pfleura2
*  2)  The problem dimensions N1, N2, N3, N4 are specified in the order
96 1 pfleura2
*      that they appear in the argument list for NAME.  N1 is used
97 1 pfleura2
*      first, N2 second, and so on, and unused problem dimensions are
98 1 pfleura2
*      passed a value of -1.
99 1 pfleura2
*  3)  The parameter value returned by ILAENV is checked for validity in
100 1 pfleura2
*      the calling subroutine.  For example, ILAENV is used to retrieve
101 1 pfleura2
*      the optimal blocksize for STRTRI as follows:
102 1 pfleura2
*
103 1 pfleura2
*      NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
104 1 pfleura2
*      IF( NB.LE.1 ) NB = MAX( 1, N )
105 1 pfleura2
*
106 1 pfleura2
*  =====================================================================
107 1 pfleura2
*
108 1 pfleura2
*     .. Local Scalars ..
109 1 pfleura2
      INTEGER            I, IC, IZ, NB, NBMIN, NX
110 1 pfleura2
      LOGICAL            CNAME, SNAME
111 1 pfleura2
      CHARACTER          C1*1, C2*2, C4*2, C3*3, SUBNAM*6
112 1 pfleura2
*     ..
113 1 pfleura2
*     .. Intrinsic Functions ..
114 1 pfleura2
      INTRINSIC          CHAR, ICHAR, INT, MIN, REAL
115 1 pfleura2
*     ..
116 1 pfleura2
*     .. External Functions ..
117 1 pfleura2
      INTEGER            IEEECK, IPARMQ
118 1 pfleura2
      EXTERNAL           IEEECK, IPARMQ
119 1 pfleura2
*     ..
120 1 pfleura2
*     .. Executable Statements ..
121 1 pfleura2
*
122 1 pfleura2
      GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
123 1 pfleura2
     $        130, 140, 150, 160, 160, 160, 160, 160 )ISPEC
124 1 pfleura2
*
125 1 pfleura2
*     Invalid value for ISPEC
126 1 pfleura2
*
127 1 pfleura2
      ILAENV = -1
128 1 pfleura2
      RETURN
129 1 pfleura2
*
130 1 pfleura2
   10 CONTINUE
131 1 pfleura2
*
132 1 pfleura2
*     Convert NAME to upper case if the first character is lower case.
133 1 pfleura2
*
134 1 pfleura2
      ILAENV = 1
135 1 pfleura2
      SUBNAM = NAME
136 1 pfleura2
      IC = ICHAR( SUBNAM( 1: 1 ) )
137 1 pfleura2
      IZ = ICHAR( 'Z' )
138 1 pfleura2
      IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
139 1 pfleura2
*
140 1 pfleura2
*        ASCII character set
141 1 pfleura2
*
142 1 pfleura2
         IF( IC.GE.97 .AND. IC.LE.122 ) THEN
143 1 pfleura2
            SUBNAM( 1: 1 ) = CHAR( IC-32 )
144 1 pfleura2
            DO 20 I = 2, 6
145 1 pfleura2
               IC = ICHAR( SUBNAM( I: I ) )
146 1 pfleura2
               IF( IC.GE.97 .AND. IC.LE.122 )
147 1 pfleura2
     $            SUBNAM( I: I ) = CHAR( IC-32 )
148 1 pfleura2
   20       CONTINUE
149 1 pfleura2
         END IF
150 1 pfleura2
*
151 1 pfleura2
      ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
152 1 pfleura2
*
153 1 pfleura2
*        EBCDIC character set
154 1 pfleura2
*
155 1 pfleura2
         IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
156 1 pfleura2
     $       ( IC.GE.145 .AND. IC.LE.153 ) .OR.
157 1 pfleura2
     $       ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
158 1 pfleura2
            SUBNAM( 1: 1 ) = CHAR( IC+64 )
159 1 pfleura2
            DO 30 I = 2, 6
160 1 pfleura2
               IC = ICHAR( SUBNAM( I: I ) )
161 1 pfleura2
               IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
162 1 pfleura2
     $             ( IC.GE.145 .AND. IC.LE.153 ) .OR.
163 1 pfleura2
     $             ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
164 1 pfleura2
     $             I ) = CHAR( IC+64 )
165 1 pfleura2
   30       CONTINUE
166 1 pfleura2
         END IF
167 1 pfleura2
*
168 1 pfleura2
      ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
169 1 pfleura2
*
170 1 pfleura2
*        Prime machines:  ASCII+128
171 1 pfleura2
*
172 1 pfleura2
         IF( IC.GE.225 .AND. IC.LE.250 ) THEN
173 1 pfleura2
            SUBNAM( 1: 1 ) = CHAR( IC-32 )
174 1 pfleura2
            DO 40 I = 2, 6
175 1 pfleura2
               IC = ICHAR( SUBNAM( I: I ) )
176 1 pfleura2
               IF( IC.GE.225 .AND. IC.LE.250 )
177 1 pfleura2
     $            SUBNAM( I: I ) = CHAR( IC-32 )
178 1 pfleura2
   40       CONTINUE
179 1 pfleura2
         END IF
180 1 pfleura2
      END IF
181 1 pfleura2
*
182 1 pfleura2
      C1 = SUBNAM( 1: 1 )
183 1 pfleura2
      SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
184 1 pfleura2
      CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
185 1 pfleura2
      IF( .NOT.( CNAME .OR. SNAME ) )
186 1 pfleura2
     $   RETURN
187 1 pfleura2
      C2 = SUBNAM( 2: 3 )
188 1 pfleura2
      C3 = SUBNAM( 4: 6 )
189 1 pfleura2
      C4 = C3( 2: 3 )
190 1 pfleura2
*
191 1 pfleura2
      GO TO ( 50, 60, 70 )ISPEC
192 1 pfleura2
*
193 1 pfleura2
   50 CONTINUE
194 1 pfleura2
*
195 1 pfleura2
*     ISPEC = 1:  block size
196 1 pfleura2
*
197 1 pfleura2
*     In these examples, separate code is provided for setting NB for
198 1 pfleura2
*     real and complex.  We assume that NB will take the same value in
199 1 pfleura2
*     single or double precision.
200 1 pfleura2
*
201 1 pfleura2
      NB = 1
202 1 pfleura2
*
203 1 pfleura2
      IF( C2.EQ.'GE' ) THEN
204 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
205 1 pfleura2
            IF( SNAME ) THEN
206 1 pfleura2
               NB = 64
207 1 pfleura2
            ELSE
208 1 pfleura2
               NB = 64
209 1 pfleura2
            END IF
210 1 pfleura2
         ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
211 1 pfleura2
     $            C3.EQ.'QLF' ) THEN
212 1 pfleura2
            IF( SNAME ) THEN
213 1 pfleura2
               NB = 32
214 1 pfleura2
            ELSE
215 1 pfleura2
               NB = 32
216 1 pfleura2
            END IF
217 1 pfleura2
         ELSE IF( C3.EQ.'HRD' ) THEN
218 1 pfleura2
            IF( SNAME ) THEN
219 1 pfleura2
               NB = 32
220 1 pfleura2
            ELSE
221 1 pfleura2
               NB = 32
222 1 pfleura2
            END IF
223 1 pfleura2
         ELSE IF( C3.EQ.'BRD' ) THEN
224 1 pfleura2
            IF( SNAME ) THEN
225 1 pfleura2
               NB = 32
226 1 pfleura2
            ELSE
227 1 pfleura2
               NB = 32
228 1 pfleura2
            END IF
229 1 pfleura2
         ELSE IF( C3.EQ.'TRI' ) THEN
230 1 pfleura2
            IF( SNAME ) THEN
231 1 pfleura2
               NB = 64
232 1 pfleura2
            ELSE
233 1 pfleura2
               NB = 64
234 1 pfleura2
            END IF
235 1 pfleura2
         END IF
236 1 pfleura2
      ELSE IF( C2.EQ.'PO' ) THEN
237 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
238 1 pfleura2
            IF( SNAME ) THEN
239 1 pfleura2
               NB = 64
240 1 pfleura2
            ELSE
241 1 pfleura2
               NB = 64
242 1 pfleura2
            END IF
243 1 pfleura2
         END IF
244 1 pfleura2
      ELSE IF( C2.EQ.'SY' ) THEN
245 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
246 1 pfleura2
            IF( SNAME ) THEN
247 1 pfleura2
               NB = 64
248 1 pfleura2
            ELSE
249 1 pfleura2
               NB = 64
250 1 pfleura2
            END IF
251 1 pfleura2
         ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
252 1 pfleura2
            NB = 32
253 1 pfleura2
         ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
254 1 pfleura2
            NB = 64
255 1 pfleura2
         END IF
256 1 pfleura2
      ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
257 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
258 1 pfleura2
            NB = 64
259 1 pfleura2
         ELSE IF( C3.EQ.'TRD' ) THEN
260 1 pfleura2
            NB = 32
261 1 pfleura2
         ELSE IF( C3.EQ.'GST' ) THEN
262 1 pfleura2
            NB = 64
263 1 pfleura2
         END IF
264 1 pfleura2
      ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
265 1 pfleura2
         IF( C3( 1: 1 ).EQ.'G' ) THEN
266 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
267 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
268 1 pfleura2
     $           THEN
269 1 pfleura2
               NB = 32
270 1 pfleura2
            END IF
271 1 pfleura2
         ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
272 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
273 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
274 1 pfleura2
     $           THEN
275 1 pfleura2
               NB = 32
276 1 pfleura2
            END IF
277 1 pfleura2
         END IF
278 1 pfleura2
      ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
279 1 pfleura2
         IF( C3( 1: 1 ).EQ.'G' ) THEN
280 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
281 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
282 1 pfleura2
     $           THEN
283 1 pfleura2
               NB = 32
284 1 pfleura2
            END IF
285 1 pfleura2
         ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
286 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
287 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
288 1 pfleura2
     $           THEN
289 1 pfleura2
               NB = 32
290 1 pfleura2
            END IF
291 1 pfleura2
         END IF
292 1 pfleura2
      ELSE IF( C2.EQ.'GB' ) THEN
293 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
294 1 pfleura2
            IF( SNAME ) THEN
295 1 pfleura2
               IF( N4.LE.64 ) THEN
296 1 pfleura2
                  NB = 1
297 1 pfleura2
               ELSE
298 1 pfleura2
                  NB = 32
299 1 pfleura2
               END IF
300 1 pfleura2
            ELSE
301 1 pfleura2
               IF( N4.LE.64 ) THEN
302 1 pfleura2
                  NB = 1
303 1 pfleura2
               ELSE
304 1 pfleura2
                  NB = 32
305 1 pfleura2
               END IF
306 1 pfleura2
            END IF
307 1 pfleura2
         END IF
308 1 pfleura2
      ELSE IF( C2.EQ.'PB' ) THEN
309 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
310 1 pfleura2
            IF( SNAME ) THEN
311 1 pfleura2
               IF( N2.LE.64 ) THEN
312 1 pfleura2
                  NB = 1
313 1 pfleura2
               ELSE
314 1 pfleura2
                  NB = 32
315 1 pfleura2
               END IF
316 1 pfleura2
            ELSE
317 1 pfleura2
               IF( N2.LE.64 ) THEN
318 1 pfleura2
                  NB = 1
319 1 pfleura2
               ELSE
320 1 pfleura2
                  NB = 32
321 1 pfleura2
               END IF
322 1 pfleura2
            END IF
323 1 pfleura2
         END IF
324 1 pfleura2
      ELSE IF( C2.EQ.'TR' ) THEN
325 1 pfleura2
         IF( C3.EQ.'TRI' ) THEN
326 1 pfleura2
            IF( SNAME ) THEN
327 1 pfleura2
               NB = 64
328 1 pfleura2
            ELSE
329 1 pfleura2
               NB = 64
330 1 pfleura2
            END IF
331 1 pfleura2
         END IF
332 1 pfleura2
      ELSE IF( C2.EQ.'LA' ) THEN
333 1 pfleura2
         IF( C3.EQ.'UUM' ) THEN
334 1 pfleura2
            IF( SNAME ) THEN
335 1 pfleura2
               NB = 64
336 1 pfleura2
            ELSE
337 1 pfleura2
               NB = 64
338 1 pfleura2
            END IF
339 1 pfleura2
         END IF
340 1 pfleura2
      ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
341 1 pfleura2
         IF( C3.EQ.'EBZ' ) THEN
342 1 pfleura2
            NB = 1
343 1 pfleura2
         END IF
344 1 pfleura2
      END IF
345 1 pfleura2
      ILAENV = NB
346 1 pfleura2
      RETURN
347 1 pfleura2
*
348 1 pfleura2
   60 CONTINUE
349 1 pfleura2
*
350 1 pfleura2
*     ISPEC = 2:  minimum block size
351 1 pfleura2
*
352 1 pfleura2
      NBMIN = 2
353 1 pfleura2
      IF( C2.EQ.'GE' ) THEN
354 1 pfleura2
         IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
355 1 pfleura2
     $       'QLF' ) THEN
356 1 pfleura2
            IF( SNAME ) THEN
357 1 pfleura2
               NBMIN = 2
358 1 pfleura2
            ELSE
359 1 pfleura2
               NBMIN = 2
360 1 pfleura2
            END IF
361 1 pfleura2
         ELSE IF( C3.EQ.'HRD' ) THEN
362 1 pfleura2
            IF( SNAME ) THEN
363 1 pfleura2
               NBMIN = 2
364 1 pfleura2
            ELSE
365 1 pfleura2
               NBMIN = 2
366 1 pfleura2
            END IF
367 1 pfleura2
         ELSE IF( C3.EQ.'BRD' ) THEN
368 1 pfleura2
            IF( SNAME ) THEN
369 1 pfleura2
               NBMIN = 2
370 1 pfleura2
            ELSE
371 1 pfleura2
               NBMIN = 2
372 1 pfleura2
            END IF
373 1 pfleura2
         ELSE IF( C3.EQ.'TRI' ) THEN
374 1 pfleura2
            IF( SNAME ) THEN
375 1 pfleura2
               NBMIN = 2
376 1 pfleura2
            ELSE
377 1 pfleura2
               NBMIN = 2
378 1 pfleura2
            END IF
379 1 pfleura2
         END IF
380 1 pfleura2
      ELSE IF( C2.EQ.'SY' ) THEN
381 1 pfleura2
         IF( C3.EQ.'TRF' ) THEN
382 1 pfleura2
            IF( SNAME ) THEN
383 1 pfleura2
               NBMIN = 8
384 1 pfleura2
            ELSE
385 1 pfleura2
               NBMIN = 8
386 1 pfleura2
            END IF
387 1 pfleura2
         ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
388 1 pfleura2
            NBMIN = 2
389 1 pfleura2
         END IF
390 1 pfleura2
      ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
391 1 pfleura2
         IF( C3.EQ.'TRD' ) THEN
392 1 pfleura2
            NBMIN = 2
393 1 pfleura2
         END IF
394 1 pfleura2
      ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
395 1 pfleura2
         IF( C3( 1: 1 ).EQ.'G' ) THEN
396 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
397 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
398 1 pfleura2
     $           THEN
399 1 pfleura2
               NBMIN = 2
400 1 pfleura2
            END IF
401 1 pfleura2
         ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
402 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
403 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
404 1 pfleura2
     $           THEN
405 1 pfleura2
               NBMIN = 2
406 1 pfleura2
            END IF
407 1 pfleura2
         END IF
408 1 pfleura2
      ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
409 1 pfleura2
         IF( C3( 1: 1 ).EQ.'G' ) THEN
410 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
411 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
412 1 pfleura2
     $           THEN
413 1 pfleura2
               NBMIN = 2
414 1 pfleura2
            END IF
415 1 pfleura2
         ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
416 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
417 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
418 1 pfleura2
     $           THEN
419 1 pfleura2
               NBMIN = 2
420 1 pfleura2
            END IF
421 1 pfleura2
         END IF
422 1 pfleura2
      END IF
423 1 pfleura2
      ILAENV = NBMIN
424 1 pfleura2
      RETURN
425 1 pfleura2
*
426 1 pfleura2
   70 CONTINUE
427 1 pfleura2
*
428 1 pfleura2
*     ISPEC = 3:  crossover point
429 1 pfleura2
*
430 1 pfleura2
      NX = 0
431 1 pfleura2
      IF( C2.EQ.'GE' ) THEN
432 1 pfleura2
         IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
433 1 pfleura2
     $       'QLF' ) THEN
434 1 pfleura2
            IF( SNAME ) THEN
435 1 pfleura2
               NX = 128
436 1 pfleura2
            ELSE
437 1 pfleura2
               NX = 128
438 1 pfleura2
            END IF
439 1 pfleura2
         ELSE IF( C3.EQ.'HRD' ) THEN
440 1 pfleura2
            IF( SNAME ) THEN
441 1 pfleura2
               NX = 128
442 1 pfleura2
            ELSE
443 1 pfleura2
               NX = 128
444 1 pfleura2
            END IF
445 1 pfleura2
         ELSE IF( C3.EQ.'BRD' ) THEN
446 1 pfleura2
            IF( SNAME ) THEN
447 1 pfleura2
               NX = 128
448 1 pfleura2
            ELSE
449 1 pfleura2
               NX = 128
450 1 pfleura2
            END IF
451 1 pfleura2
         END IF
452 1 pfleura2
      ELSE IF( C2.EQ.'SY' ) THEN
453 1 pfleura2
         IF( SNAME .AND. C3.EQ.'TRD' ) THEN
454 1 pfleura2
            NX = 32
455 1 pfleura2
         END IF
456 1 pfleura2
      ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
457 1 pfleura2
         IF( C3.EQ.'TRD' ) THEN
458 1 pfleura2
            NX = 32
459 1 pfleura2
         END IF
460 1 pfleura2
      ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
461 1 pfleura2
         IF( C3( 1: 1 ).EQ.'G' ) THEN
462 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
463 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
464 1 pfleura2
     $           THEN
465 1 pfleura2
               NX = 128
466 1 pfleura2
            END IF
467 1 pfleura2
         END IF
468 1 pfleura2
      ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
469 1 pfleura2
         IF( C3( 1: 1 ).EQ.'G' ) THEN
470 1 pfleura2
            IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
471 1 pfleura2
     $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
472 1 pfleura2
     $           THEN
473 1 pfleura2
               NX = 128
474 1 pfleura2
            END IF
475 1 pfleura2
         END IF
476 1 pfleura2
      END IF
477 1 pfleura2
      ILAENV = NX
478 1 pfleura2
      RETURN
479 1 pfleura2
*
480 1 pfleura2
   80 CONTINUE
481 1 pfleura2
*
482 1 pfleura2
*     ISPEC = 4:  number of shifts (used by xHSEQR)
483 1 pfleura2
*
484 1 pfleura2
      ILAENV = 6
485 1 pfleura2
      RETURN
486 1 pfleura2
*
487 1 pfleura2
   90 CONTINUE
488 1 pfleura2
*
489 1 pfleura2
*     ISPEC = 5:  minimum column dimension (not used)
490 1 pfleura2
*
491 1 pfleura2
      ILAENV = 2
492 1 pfleura2
      RETURN
493 1 pfleura2
*
494 1 pfleura2
  100 CONTINUE
495 1 pfleura2
*
496 1 pfleura2
*     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
497 1 pfleura2
*
498 1 pfleura2
      ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
499 1 pfleura2
      RETURN
500 1 pfleura2
*
501 1 pfleura2
  110 CONTINUE
502 1 pfleura2
*
503 1 pfleura2
*     ISPEC = 7:  number of processors (not used)
504 1 pfleura2
*
505 1 pfleura2
      ILAENV = 1
506 1 pfleura2
      RETURN
507 1 pfleura2
*
508 1 pfleura2
  120 CONTINUE
509 1 pfleura2
*
510 1 pfleura2
*     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
511 1 pfleura2
*
512 1 pfleura2
      ILAENV = 50
513 1 pfleura2
      RETURN
514 1 pfleura2
*
515 1 pfleura2
  130 CONTINUE
516 1 pfleura2
*
517 1 pfleura2
*     ISPEC = 9:  maximum size of the subproblems at the bottom of the
518 1 pfleura2
*                 computation tree in the divide-and-conquer algorithm
519 1 pfleura2
*                 (used by xGELSD and xGESDD)
520 1 pfleura2
*
521 1 pfleura2
      ILAENV = 25
522 1 pfleura2
      RETURN
523 1 pfleura2
*
524 1 pfleura2
  140 CONTINUE
525 1 pfleura2
*
526 1 pfleura2
*     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
527 1 pfleura2
*
528 1 pfleura2
*     ILAENV = 0
529 1 pfleura2
      ILAENV = 1
530 1 pfleura2
      IF( ILAENV.EQ.1 ) THEN
531 1 pfleura2
         ILAENV = IEEECK( 1, 0.0, 1.0 )
532 1 pfleura2
      END IF
533 1 pfleura2
      RETURN
534 1 pfleura2
*
535 1 pfleura2
  150 CONTINUE
536 1 pfleura2
*
537 1 pfleura2
*     ISPEC = 11: infinity arithmetic can be trusted not to trap
538 1 pfleura2
*
539 1 pfleura2
*     ILAENV = 0
540 1 pfleura2
      ILAENV = 1
541 1 pfleura2
      IF( ILAENV.EQ.1 ) THEN
542 1 pfleura2
         ILAENV = IEEECK( 0, 0.0, 1.0 )
543 1 pfleura2
      END IF
544 1 pfleura2
      RETURN
545 1 pfleura2
*
546 1 pfleura2
  160 CONTINUE
547 1 pfleura2
*
548 1 pfleura2
*     12 <= ISPEC <= 16: xHSEQR or one of its subroutines.
549 1 pfleura2
*
550 1 pfleura2
      ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
551 1 pfleura2
      RETURN
552 1 pfleura2
*
553 1 pfleura2
*     End of ILAENV
554 1 pfleura2
*
555 1 pfleura2
      END