root / src / lapack / util / ilaenv.f @ 11
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 |