Mercurial > octave-nkf
comparison libcruft/lapack/ilaenv.f @ 7034:68db500cb558
[project @ 2007-10-16 18:54:19 by jwe]
author | jwe |
---|---|
date | Tue, 16 Oct 2007 18:54:23 +0000 |
parents | 15cddaacbc2d |
children |
comparison
equal
deleted
inserted
replaced
7033:f0142f2afdc6 | 7034:68db500cb558 |
---|---|
1 INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, | 1 INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) |
2 $ N4 ) | 2 * |
3 * | 3 * -- LAPACK auxiliary routine (version 3.1.1) -- |
4 * -- LAPACK auxiliary routine (version 3.0) -- | 4 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. |
5 * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., | 5 * January 2007 |
6 * Courant Institute, Argonne National Lab, and Rice University | |
7 * June 30, 1999 | |
8 * | 6 * |
9 * .. Scalar Arguments .. | 7 * .. Scalar Arguments .. |
10 CHARACTER*( * ) NAME, OPTS | 8 CHARACTER*( * ) NAME, OPTS |
11 INTEGER ISPEC, N1, N2, N3, N4 | 9 INTEGER ISPEC, N1, N2, N3, N4 |
12 * .. | 10 * .. |
15 * ======= | 13 * ======= |
16 * | 14 * |
17 * ILAENV is called from the LAPACK routines to choose problem-dependent | 15 * ILAENV is called from the LAPACK routines to choose problem-dependent |
18 * parameters for the local environment. See ISPEC for a description of | 16 * parameters for the local environment. See ISPEC for a description of |
19 * the parameters. | 17 * the parameters. |
18 * | |
19 * ILAENV returns an INTEGER | |
20 * if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC | |
21 * if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. | |
20 * | 22 * |
21 * This version provides a set of parameters which should give good, | 23 * This version provides a set of parameters which should give good, |
22 * but not optimal, performance on many of the currently available | 24 * but not optimal, performance on many of the currently available |
23 * computers. Users are encouraged to modify this subroutine to set | 25 * computers. Users are encouraged to modify this subroutine to set |
24 * the tuning parameters for their particular machine using the option | 26 * the tuning parameters for their particular machine using the option |
39 * should be used; if the usable block size is less than | 41 * should be used; if the usable block size is less than |
40 * this value, an unblocked routine should be used. | 42 * this value, an unblocked routine should be used. |
41 * = 3: the crossover point (in a block routine, for N less | 43 * = 3: the crossover point (in a block routine, for N less |
42 * than this value, an unblocked routine should be used) | 44 * than this value, an unblocked routine should be used) |
43 * = 4: the number of shifts, used in the nonsymmetric | 45 * = 4: the number of shifts, used in the nonsymmetric |
44 * eigenvalue routines | 46 * eigenvalue routines (DEPRECATED) |
45 * = 5: the minimum column dimension for blocking to be used; | 47 * = 5: the minimum column dimension for blocking to be used; |
46 * rectangular blocks must have dimension at least k by m, | 48 * rectangular blocks must have dimension at least k by m, |
47 * where k is given by ILAENV(2,...) and m by ILAENV(5,...) | 49 * where k is given by ILAENV(2,...) and m by ILAENV(5,...) |
48 * = 6: the crossover point for the SVD (when reducing an m by n | 50 * = 6: the crossover point for the SVD (when reducing an m by n |
49 * matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds | 51 * matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds |
50 * this value, a QR factorization is used first to reduce | 52 * this value, a QR factorization is used first to reduce |
51 * the matrix to a triangular form.) | 53 * the matrix to a triangular form.) |
52 * = 7: the number of processors | 54 * = 7: the number of processors |
53 * = 8: the crossover point for the multishift QR and QZ methods | 55 * = 8: the crossover point for the multishift QR method |
54 * for nonsymmetric eigenvalue problems. | 56 * for nonsymmetric eigenvalue problems (DEPRECATED) |
55 * = 9: maximum size of the subproblems at the bottom of the | 57 * = 9: maximum size of the subproblems at the bottom of the |
56 * computation tree in the divide-and-conquer algorithm | 58 * computation tree in the divide-and-conquer algorithm |
57 * (used by xGELSD and xGESDD) | 59 * (used by xGELSD and xGESDD) |
58 * =10: ieee NaN arithmetic can be trusted not to trap | 60 * =10: ieee NaN arithmetic can be trusted not to trap |
59 * =11: infinity arithmetic can be trusted not to trap | 61 * =11: infinity arithmetic can be trusted not to trap |
62 * 12 <= ISPEC <= 16: | |
63 * xHSEQR or one of its subroutines, | |
64 * see IPARMQ for detailed explanation | |
60 * | 65 * |
61 * NAME (input) CHARACTER*(*) | 66 * NAME (input) CHARACTER*(*) |
62 * The name of the calling subroutine, in either upper case or | 67 * The name of the calling subroutine, in either upper case or |
63 * lower case. | 68 * lower case. |
64 * | 69 * |
72 * N2 (input) INTEGER | 77 * N2 (input) INTEGER |
73 * N3 (input) INTEGER | 78 * N3 (input) INTEGER |
74 * N4 (input) INTEGER | 79 * N4 (input) INTEGER |
75 * Problem dimensions for the subroutine NAME; these may not all | 80 * Problem dimensions for the subroutine NAME; these may not all |
76 * be required. | 81 * be required. |
77 * | |
78 * (ILAENV) (output) INTEGER | |
79 * >= 0: the value of the parameter specified by ISPEC | |
80 * < 0: if ILAENV = -k, the k-th argument had an illegal value. | |
81 * | 82 * |
82 * Further Details | 83 * Further Details |
83 * =============== | 84 * =============== |
84 * | 85 * |
85 * The following conventions have been used when calling ILAENV from the | 86 * The following conventions have been used when calling ILAENV from the |
100 * IF( NB.LE.1 ) NB = MAX( 1, N ) | 101 * IF( NB.LE.1 ) NB = MAX( 1, N ) |
101 * | 102 * |
102 * ===================================================================== | 103 * ===================================================================== |
103 * | 104 * |
104 * .. Local Scalars .. | 105 * .. Local Scalars .. |
106 INTEGER I, IC, IZ, NB, NBMIN, NX | |
105 LOGICAL CNAME, SNAME | 107 LOGICAL CNAME, SNAME |
106 CHARACTER*1 C1 | 108 CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 |
107 CHARACTER*2 C2, C4 | |
108 CHARACTER*3 C3 | |
109 CHARACTER*6 SUBNAM | |
110 INTEGER I, IC, IZ, NB, NBMIN, NX | |
111 * .. | 109 * .. |
112 * .. Intrinsic Functions .. | 110 * .. Intrinsic Functions .. |
113 INTRINSIC CHAR, ICHAR, INT, MIN, REAL | 111 INTRINSIC CHAR, ICHAR, INT, MIN, REAL |
114 * .. | 112 * .. |
115 * .. External Functions .. | 113 * .. External Functions .. |
116 INTEGER IEEECK | 114 INTEGER IEEECK, IPARMQ |
117 EXTERNAL IEEECK | 115 EXTERNAL IEEECK, IPARMQ |
118 * .. | 116 * .. |
119 * .. Executable Statements .. | 117 * .. Executable Statements .. |
120 * | 118 * |
121 GO TO ( 100, 100, 100, 400, 500, 600, 700, 800, 900, 1000, | 119 GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, |
122 $ 1100 ) ISPEC | 120 $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC |
123 * | 121 * |
124 * Invalid value for ISPEC | 122 * Invalid value for ISPEC |
125 * | 123 * |
126 ILAENV = -1 | 124 ILAENV = -1 |
127 RETURN | 125 RETURN |
128 * | 126 * |
129 100 CONTINUE | 127 10 CONTINUE |
130 * | 128 * |
131 * Convert NAME to upper case if the first character is lower case. | 129 * Convert NAME to upper case if the first character is lower case. |
132 * | 130 * |
133 ILAENV = 1 | 131 ILAENV = 1 |
134 SUBNAM = NAME | 132 SUBNAM = NAME |
135 IC = ICHAR( SUBNAM( 1:1 ) ) | 133 IC = ICHAR( SUBNAM( 1: 1 ) ) |
136 IZ = ICHAR( 'Z' ) | 134 IZ = ICHAR( 'Z' ) |
137 IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN | 135 IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN |
138 * | 136 * |
139 * ASCII character set | 137 * ASCII character set |
140 * | 138 * |
141 IF( IC.GE.97 .AND. IC.LE.122 ) THEN | 139 IF( IC.GE.97 .AND. IC.LE.122 ) THEN |
142 SUBNAM( 1:1 ) = CHAR( IC-32 ) | 140 SUBNAM( 1: 1 ) = CHAR( IC-32 ) |
143 DO 10 I = 2, 6 | 141 DO 20 I = 2, 6 |
144 IC = ICHAR( SUBNAM( I:I ) ) | 142 IC = ICHAR( SUBNAM( I: I ) ) |
145 IF( IC.GE.97 .AND. IC.LE.122 ) | 143 IF( IC.GE.97 .AND. IC.LE.122 ) |
146 $ SUBNAM( I:I ) = CHAR( IC-32 ) | 144 $ SUBNAM( I: I ) = CHAR( IC-32 ) |
147 10 CONTINUE | 145 20 CONTINUE |
148 END IF | 146 END IF |
149 * | 147 * |
150 ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN | 148 ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN |
151 * | 149 * |
152 * EBCDIC character set | 150 * EBCDIC character set |
153 * | 151 * |
154 IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. | 152 IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. |
155 $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. | 153 $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. |
156 $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN | 154 $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN |
157 SUBNAM( 1:1 ) = CHAR( IC+64 ) | 155 SUBNAM( 1: 1 ) = CHAR( IC+64 ) |
158 DO 20 I = 2, 6 | 156 DO 30 I = 2, 6 |
159 IC = ICHAR( SUBNAM( I:I ) ) | 157 IC = ICHAR( SUBNAM( I: I ) ) |
160 IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. | 158 IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. |
161 $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. | 159 $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. |
162 $ ( IC.GE.162 .AND. IC.LE.169 ) ) | 160 $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: |
163 $ SUBNAM( I:I ) = CHAR( IC+64 ) | 161 $ I ) = CHAR( IC+64 ) |
164 20 CONTINUE | 162 30 CONTINUE |
165 END IF | 163 END IF |
166 * | 164 * |
167 ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN | 165 ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN |
168 * | 166 * |
169 * Prime machines: ASCII+128 | 167 * Prime machines: ASCII+128 |
170 * | 168 * |
171 IF( IC.GE.225 .AND. IC.LE.250 ) THEN | 169 IF( IC.GE.225 .AND. IC.LE.250 ) THEN |
172 SUBNAM( 1:1 ) = CHAR( IC-32 ) | 170 SUBNAM( 1: 1 ) = CHAR( IC-32 ) |
173 DO 30 I = 2, 6 | 171 DO 40 I = 2, 6 |
174 IC = ICHAR( SUBNAM( I:I ) ) | 172 IC = ICHAR( SUBNAM( I: I ) ) |
175 IF( IC.GE.225 .AND. IC.LE.250 ) | 173 IF( IC.GE.225 .AND. IC.LE.250 ) |
176 $ SUBNAM( I:I ) = CHAR( IC-32 ) | 174 $ SUBNAM( I: I ) = CHAR( IC-32 ) |
177 30 CONTINUE | 175 40 CONTINUE |
178 END IF | 176 END IF |
179 END IF | 177 END IF |
180 * | 178 * |
181 C1 = SUBNAM( 1:1 ) | 179 C1 = SUBNAM( 1: 1 ) |
182 SNAME = C1.EQ.'S' .OR. C1.EQ.'D' | 180 SNAME = C1.EQ.'S' .OR. C1.EQ.'D' |
183 CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' | 181 CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' |
184 IF( .NOT.( CNAME .OR. SNAME ) ) | 182 IF( .NOT.( CNAME .OR. SNAME ) ) |
185 $ RETURN | 183 $ RETURN |
186 C2 = SUBNAM( 2:3 ) | 184 C2 = SUBNAM( 2: 3 ) |
187 C3 = SUBNAM( 4:6 ) | 185 C3 = SUBNAM( 4: 6 ) |
188 C4 = C3( 2:3 ) | 186 C4 = C3( 2: 3 ) |
189 * | 187 * |
190 GO TO ( 110, 200, 300 ) ISPEC | 188 GO TO ( 50, 60, 70 )ISPEC |
191 * | 189 * |
192 110 CONTINUE | 190 50 CONTINUE |
193 * | 191 * |
194 * ISPEC = 1: block size | 192 * ISPEC = 1: block size |
195 * | 193 * |
196 * In these examples, separate code is provided for setting NB for | 194 * In these examples, separate code is provided for setting NB for |
197 * real and complex. We assume that NB will take the same value in | 195 * real and complex. We assume that NB will take the same value in |
259 NB = 32 | 257 NB = 32 |
260 ELSE IF( C3.EQ.'GST' ) THEN | 258 ELSE IF( C3.EQ.'GST' ) THEN |
261 NB = 64 | 259 NB = 64 |
262 END IF | 260 END IF |
263 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN | 261 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN |
264 IF( C3( 1:1 ).EQ.'G' ) THEN | 262 IF( C3( 1: 1 ).EQ.'G' ) THEN |
265 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 263 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
266 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 264 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
267 $ C4.EQ.'BR' ) THEN | 265 $ THEN |
268 NB = 32 | 266 NB = 32 |
269 END IF | 267 END IF |
270 ELSE IF( C3( 1:1 ).EQ.'M' ) THEN | 268 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
271 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 269 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
272 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 270 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
273 $ C4.EQ.'BR' ) THEN | 271 $ THEN |
274 NB = 32 | 272 NB = 32 |
275 END IF | 273 END IF |
276 END IF | 274 END IF |
277 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN | 275 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN |
278 IF( C3( 1:1 ).EQ.'G' ) THEN | 276 IF( C3( 1: 1 ).EQ.'G' ) THEN |
279 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 277 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
280 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 278 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
281 $ C4.EQ.'BR' ) THEN | 279 $ THEN |
282 NB = 32 | 280 NB = 32 |
283 END IF | 281 END IF |
284 ELSE IF( C3( 1:1 ).EQ.'M' ) THEN | 282 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
285 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 283 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
286 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 284 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
287 $ C4.EQ.'BR' ) THEN | 285 $ THEN |
288 NB = 32 | 286 NB = 32 |
289 END IF | 287 END IF |
290 END IF | 288 END IF |
291 ELSE IF( C2.EQ.'GB' ) THEN | 289 ELSE IF( C2.EQ.'GB' ) THEN |
292 IF( C3.EQ.'TRF' ) THEN | 290 IF( C3.EQ.'TRF' ) THEN |
342 END IF | 340 END IF |
343 END IF | 341 END IF |
344 ILAENV = NB | 342 ILAENV = NB |
345 RETURN | 343 RETURN |
346 * | 344 * |
347 200 CONTINUE | 345 60 CONTINUE |
348 * | 346 * |
349 * ISPEC = 2: minimum block size | 347 * ISPEC = 2: minimum block size |
350 * | 348 * |
351 NBMIN = 2 | 349 NBMIN = 2 |
352 IF( C2.EQ.'GE' ) THEN | 350 IF( C2.EQ.'GE' ) THEN |
353 IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. | 351 IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. |
354 $ C3.EQ.'QLF' ) THEN | 352 $ 'QLF' ) THEN |
355 IF( SNAME ) THEN | 353 IF( SNAME ) THEN |
356 NBMIN = 2 | 354 NBMIN = 2 |
357 ELSE | 355 ELSE |
358 NBMIN = 2 | 356 NBMIN = 2 |
359 END IF | 357 END IF |
389 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN | 387 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
390 IF( C3.EQ.'TRD' ) THEN | 388 IF( C3.EQ.'TRD' ) THEN |
391 NBMIN = 2 | 389 NBMIN = 2 |
392 END IF | 390 END IF |
393 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN | 391 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN |
394 IF( C3( 1:1 ).EQ.'G' ) THEN | 392 IF( C3( 1: 1 ).EQ.'G' ) THEN |
395 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 393 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
396 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 394 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
397 $ C4.EQ.'BR' ) THEN | 395 $ THEN |
398 NBMIN = 2 | 396 NBMIN = 2 |
399 END IF | 397 END IF |
400 ELSE IF( C3( 1:1 ).EQ.'M' ) THEN | 398 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
401 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 399 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
402 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 400 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
403 $ C4.EQ.'BR' ) THEN | 401 $ THEN |
404 NBMIN = 2 | 402 NBMIN = 2 |
405 END IF | 403 END IF |
406 END IF | 404 END IF |
407 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN | 405 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN |
408 IF( C3( 1:1 ).EQ.'G' ) THEN | 406 IF( C3( 1: 1 ).EQ.'G' ) THEN |
409 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 407 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
410 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 408 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
411 $ C4.EQ.'BR' ) THEN | 409 $ THEN |
412 NBMIN = 2 | 410 NBMIN = 2 |
413 END IF | 411 END IF |
414 ELSE IF( C3( 1:1 ).EQ.'M' ) THEN | 412 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN |
415 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 413 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
416 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 414 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
417 $ C4.EQ.'BR' ) THEN | 415 $ THEN |
418 NBMIN = 2 | 416 NBMIN = 2 |
419 END IF | 417 END IF |
420 END IF | 418 END IF |
421 END IF | 419 END IF |
422 ILAENV = NBMIN | 420 ILAENV = NBMIN |
423 RETURN | 421 RETURN |
424 * | 422 * |
425 300 CONTINUE | 423 70 CONTINUE |
426 * | 424 * |
427 * ISPEC = 3: crossover point | 425 * ISPEC = 3: crossover point |
428 * | 426 * |
429 NX = 0 | 427 NX = 0 |
430 IF( C2.EQ.'GE' ) THEN | 428 IF( C2.EQ.'GE' ) THEN |
431 IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. | 429 IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. |
432 $ C3.EQ.'QLF' ) THEN | 430 $ 'QLF' ) THEN |
433 IF( SNAME ) THEN | 431 IF( SNAME ) THEN |
434 NX = 128 | 432 NX = 128 |
435 ELSE | 433 ELSE |
436 NX = 128 | 434 NX = 128 |
437 END IF | 435 END IF |
455 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN | 453 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
456 IF( C3.EQ.'TRD' ) THEN | 454 IF( C3.EQ.'TRD' ) THEN |
457 NX = 32 | 455 NX = 32 |
458 END IF | 456 END IF |
459 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN | 457 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN |
460 IF( C3( 1:1 ).EQ.'G' ) THEN | 458 IF( C3( 1: 1 ).EQ.'G' ) THEN |
461 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 459 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
462 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 460 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
463 $ C4.EQ.'BR' ) THEN | 461 $ THEN |
464 NX = 128 | 462 NX = 128 |
465 END IF | 463 END IF |
466 END IF | 464 END IF |
467 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN | 465 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN |
468 IF( C3( 1:1 ).EQ.'G' ) THEN | 466 IF( C3( 1: 1 ).EQ.'G' ) THEN |
469 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. | 467 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. |
470 $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. | 468 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) |
471 $ C4.EQ.'BR' ) THEN | 469 $ THEN |
472 NX = 128 | 470 NX = 128 |
473 END IF | 471 END IF |
474 END IF | 472 END IF |
475 END IF | 473 END IF |
476 ILAENV = NX | 474 ILAENV = NX |
477 RETURN | 475 RETURN |
478 * | 476 * |
479 400 CONTINUE | 477 80 CONTINUE |
480 * | 478 * |
481 * ISPEC = 4: number of shifts (used by xHSEQR) | 479 * ISPEC = 4: number of shifts (used by xHSEQR) |
482 * | 480 * |
483 ILAENV = 6 | 481 ILAENV = 6 |
484 RETURN | 482 RETURN |
485 * | 483 * |
486 500 CONTINUE | 484 90 CONTINUE |
487 * | 485 * |
488 * ISPEC = 5: minimum column dimension (not used) | 486 * ISPEC = 5: minimum column dimension (not used) |
489 * | 487 * |
490 ILAENV = 2 | 488 ILAENV = 2 |
491 RETURN | 489 RETURN |
492 * | 490 * |
493 600 CONTINUE | 491 100 CONTINUE |
494 * | 492 * |
495 * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) | 493 * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) |
496 * | 494 * |
497 ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) | 495 ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) |
498 RETURN | 496 RETURN |
499 * | 497 * |
500 700 CONTINUE | 498 110 CONTINUE |
501 * | 499 * |
502 * ISPEC = 7: number of processors (not used) | 500 * ISPEC = 7: number of processors (not used) |
503 * | 501 * |
504 ILAENV = 1 | 502 ILAENV = 1 |
505 RETURN | 503 RETURN |
506 * | 504 * |
507 800 CONTINUE | 505 120 CONTINUE |
508 * | 506 * |
509 * ISPEC = 8: crossover point for multishift (used by xHSEQR) | 507 * ISPEC = 8: crossover point for multishift (used by xHSEQR) |
510 * | 508 * |
511 ILAENV = 50 | 509 ILAENV = 50 |
512 RETURN | 510 RETURN |
513 * | 511 * |
514 900 CONTINUE | 512 130 CONTINUE |
515 * | 513 * |
516 * ISPEC = 9: maximum size of the subproblems at the bottom of the | 514 * ISPEC = 9: maximum size of the subproblems at the bottom of the |
517 * computation tree in the divide-and-conquer algorithm | 515 * computation tree in the divide-and-conquer algorithm |
518 * (used by xGELSD and xGESDD) | 516 * (used by xGELSD and xGESDD) |
519 * | 517 * |
520 ILAENV = 25 | 518 ILAENV = 25 |
521 RETURN | 519 RETURN |
522 * | 520 * |
523 1000 CONTINUE | 521 140 CONTINUE |
524 * | 522 * |
525 * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap | 523 * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap |
526 * | 524 * |
527 C ILAENV = 0 | 525 * ILAENV = 0 |
528 ILAENV = 1 | 526 ILAENV = 1 |
529 IF( ILAENV.EQ.1 ) THEN | 527 IF( ILAENV.EQ.1 ) THEN |
530 ILAENV = IEEECK( 0, 0.0, 1.0 ) | 528 ILAENV = IEEECK( 0, 0.0, 1.0 ) |
531 END IF | 529 END IF |
532 RETURN | 530 RETURN |
533 * | 531 * |
534 1100 CONTINUE | 532 150 CONTINUE |
535 * | 533 * |
536 * ISPEC = 11: infinity arithmetic can be trusted not to trap | 534 * ISPEC = 11: infinity arithmetic can be trusted not to trap |
537 * | 535 * |
538 C ILAENV = 0 | 536 * ILAENV = 0 |
539 ILAENV = 1 | 537 ILAENV = 1 |
540 IF( ILAENV.EQ.1 ) THEN | 538 IF( ILAENV.EQ.1 ) THEN |
541 ILAENV = IEEECK( 1, 0.0, 1.0 ) | 539 ILAENV = IEEECK( 1, 0.0, 1.0 ) |
542 END IF | 540 END IF |
543 RETURN | 541 RETURN |
544 * | 542 * |
543 160 CONTINUE | |
544 * | |
545 * 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. | |
546 * | |
547 ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) | |
548 RETURN | |
549 * | |
545 * End of ILAENV | 550 * End of ILAENV |
546 * | 551 * |
547 END | 552 END |