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