![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b ILAENV 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 *> \htmlonly 00009 *> Download ILAENV + dependencies 00010 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaenv.f"> 00011 *> [TGZ]</a> 00012 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaenv.f"> 00013 *> [ZIP]</a> 00014 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaenv.f"> 00015 *> [TXT]</a> 00016 *> \endhtmlonly 00017 * 00018 * Definition: 00019 * =========== 00020 * 00021 * INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) 00022 * 00023 * .. Scalar Arguments .. 00024 * CHARACTER*( * ) NAME, OPTS 00025 * INTEGER ISPEC, N1, N2, N3, N4 00026 * .. 00027 * 00028 * 00029 *> \par Purpose: 00030 * ============= 00031 *> 00032 *> \verbatim 00033 *> 00034 *> ILAENV is called from the LAPACK routines to choose problem-dependent 00035 *> parameters for the local environment. See ISPEC for a description of 00036 *> the parameters. 00037 *> 00038 *> ILAENV returns an INTEGER 00039 *> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC 00040 *> if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. 00041 *> 00042 *> This version provides a set of parameters which should give good, 00043 *> but not optimal, performance on many of the currently available 00044 *> computers. Users are encouraged to modify this subroutine to set 00045 *> the tuning parameters for their particular machine using the option 00046 *> and problem size information in the arguments. 00047 *> 00048 *> This routine will not function correctly if it is converted to all 00049 *> lower case. Converting it to all upper case is allowed. 00050 *> \endverbatim 00051 * 00052 * Arguments: 00053 * ========== 00054 * 00055 *> \param[in] ISPEC 00056 *> \verbatim 00057 *> ISPEC is INTEGER 00058 *> Specifies the parameter to be returned as the value of 00059 *> ILAENV. 00060 *> = 1: the optimal blocksize; if this value is 1, an unblocked 00061 *> algorithm will give the best performance. 00062 *> = 2: the minimum block size for which the block routine 00063 *> should be used; if the usable block size is less than 00064 *> this value, an unblocked routine should be used. 00065 *> = 3: the crossover point (in a block routine, for N less 00066 *> than this value, an unblocked routine should be used) 00067 *> = 4: the number of shifts, used in the nonsymmetric 00068 *> eigenvalue routines (DEPRECATED) 00069 *> = 5: the minimum column dimension for blocking to be used; 00070 *> rectangular blocks must have dimension at least k by m, 00071 *> where k is given by ILAENV(2,...) and m by ILAENV(5,...) 00072 *> = 6: the crossover point for the SVD (when reducing an m by n 00073 *> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds 00074 *> this value, a QR factorization is used first to reduce 00075 *> the matrix to a triangular form.) 00076 *> = 7: the number of processors 00077 *> = 8: the crossover point for the multishift QR method 00078 *> for nonsymmetric eigenvalue problems (DEPRECATED) 00079 *> = 9: maximum size of the subproblems at the bottom of the 00080 *> computation tree in the divide-and-conquer algorithm 00081 *> (used by xGELSD and xGESDD) 00082 *> =10: ieee NaN arithmetic can be trusted not to trap 00083 *> =11: infinity arithmetic can be trusted not to trap 00084 *> 12 <= ISPEC <= 16: 00085 *> xHSEQR or one of its subroutines, 00086 *> see IPARMQ for detailed explanation 00087 *> \endverbatim 00088 *> 00089 *> \param[in] NAME 00090 *> \verbatim 00091 *> NAME is CHARACTER*(*) 00092 *> The name of the calling subroutine, in either upper case or 00093 *> lower case. 00094 *> \endverbatim 00095 *> 00096 *> \param[in] OPTS 00097 *> \verbatim 00098 *> OPTS is CHARACTER*(*) 00099 *> The character options to the subroutine NAME, concatenated 00100 *> into a single character string. For example, UPLO = 'U', 00101 *> TRANS = 'T', and DIAG = 'N' for a triangular routine would 00102 *> be specified as OPTS = 'UTN'. 00103 *> \endverbatim 00104 *> 00105 *> \param[in] N1 00106 *> \verbatim 00107 *> N1 is INTEGER 00108 *> \endverbatim 00109 *> 00110 *> \param[in] N2 00111 *> \verbatim 00112 *> N2 is INTEGER 00113 *> \endverbatim 00114 *> 00115 *> \param[in] N3 00116 *> \verbatim 00117 *> N3 is INTEGER 00118 *> \endverbatim 00119 *> 00120 *> \param[in] N4 00121 *> \verbatim 00122 *> N4 is INTEGER 00123 *> Problem dimensions for the subroutine NAME; these may not all 00124 *> be required. 00125 *> \endverbatim 00126 * 00127 * Authors: 00128 * ======== 00129 * 00130 *> \author Univ. of Tennessee 00131 *> \author Univ. of California Berkeley 00132 *> \author Univ. of Colorado Denver 00133 *> \author NAG Ltd. 00134 * 00135 *> \date November 2011 00136 * 00137 *> \ingroup auxOTHERauxiliary 00138 * 00139 *> \par Further Details: 00140 * ===================== 00141 *> 00142 *> \verbatim 00143 *> 00144 *> The following conventions have been used when calling ILAENV from the 00145 *> LAPACK routines: 00146 *> 1) OPTS is a concatenation of all of the character options to 00147 *> subroutine NAME, in the same order that they appear in the 00148 *> argument list for NAME, even if they are not used in determining 00149 *> the value of the parameter specified by ISPEC. 00150 *> 2) The problem dimensions N1, N2, N3, N4 are specified in the order 00151 *> that they appear in the argument list for NAME. N1 is used 00152 *> first, N2 second, and so on, and unused problem dimensions are 00153 *> passed a value of -1. 00154 *> 3) The parameter value returned by ILAENV is checked for validity in 00155 *> the calling subroutine. For example, ILAENV is used to retrieve 00156 *> the optimal blocksize for STRTRI as follows: 00157 *> 00158 *> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) 00159 *> IF( NB.LE.1 ) NB = MAX( 1, N ) 00160 *> \endverbatim 00161 *> 00162 * ===================================================================== 00163 INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) 00164 * 00165 * -- LAPACK auxiliary routine (version 3.4.0) -- 00166 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00167 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00168 * November 2011 00169 * 00170 * .. Scalar Arguments .. 00171 CHARACTER*( * ) NAME, OPTS 00172 INTEGER ISPEC, N1, N2, N3, N4 00173 * .. 00174 * 00175 * ===================================================================== 00176 * 00177 * .. Local Scalars .. 00178 INTEGER I, IC, IZ, NB, NBMIN, NX 00179 LOGICAL CNAME, SNAME 00180 CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 00181 * .. 00182 * .. Intrinsic Functions .. 00183 INTRINSIC CHAR, ICHAR, INT, MIN, REAL 00184 * .. 00185 * .. External Functions .. 00186 INTEGER IEEECK, IPARMQ 00187 EXTERNAL IEEECK, IPARMQ 00188 * .. 00189 * .. Executable Statements .. 00190 * 00191 GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, 00192 $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC 00193 * 00194 * Invalid value for ISPEC 00195 * 00196 ILAENV = -1 00197 RETURN 00198 * 00199 10 CONTINUE 00200 * 00201 * Convert NAME to upper case if the first character is lower case. 00202 * 00203 ILAENV = 1 00204 SUBNAM = NAME 00205 IC = ICHAR( SUBNAM( 1: 1 ) ) 00206 IZ = ICHAR( 'Z' ) 00207 IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN 00208 * 00209 * ASCII character set 00210 * 00211 IF( IC.GE.97 .AND. IC.LE.122 ) THEN 00212 SUBNAM( 1: 1 ) = CHAR( IC-32 ) 00213 DO 20 I = 2, 6 00214 IC = ICHAR( SUBNAM( I: I ) ) 00215 IF( IC.GE.97 .AND. IC.LE.122 ) 00216 $ SUBNAM( I: I ) = CHAR( IC-32 ) 00217 20 CONTINUE 00218 END IF 00219 * 00220 ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN 00221 * 00222 * EBCDIC character set 00223 * 00224 IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. 00225 $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. 00226 $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN 00227 SUBNAM( 1: 1 ) = CHAR( IC+64 ) 00228 DO 30 I = 2, 6 00229 IC = ICHAR( SUBNAM( I: I ) ) 00230 IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. 00231 $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. 00232 $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: 00233 $ I ) = CHAR( IC+64 ) 00234 30 CONTINUE 00235 END IF 00236 * 00237 ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN 00238 * 00239 * Prime machines: ASCII+128 00240 * 00241 IF( IC.GE.225 .AND. IC.LE.250 ) THEN 00242 SUBNAM( 1: 1 ) = CHAR( IC-32 ) 00243 DO 40 I = 2, 6 00244 IC = ICHAR( SUBNAM( I: I ) ) 00245 IF( IC.GE.225 .AND. IC.LE.250 ) 00246 $ SUBNAM( I: I ) = CHAR( IC-32 ) 00247 40 CONTINUE 00248 END IF 00249 END IF 00250 * 00251 C1 = SUBNAM( 1: 1 ) 00252 SNAME = C1.EQ.'S' .OR. C1.EQ.'D' 00253 CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' 00254 IF( .NOT.( CNAME .OR. SNAME ) ) 00255 $ RETURN 00256 C2 = SUBNAM( 2: 3 ) 00257 C3 = SUBNAM( 4: 6 ) 00258 C4 = C3( 2: 3 ) 00259 * 00260 GO TO ( 50, 60, 70 )ISPEC 00261 * 00262 50 CONTINUE 00263 * 00264 * ISPEC = 1: block size 00265 * 00266 * In these examples, separate code is provided for setting NB for 00267 * real and complex. We assume that NB will take the same value in 00268 * single or double precision. 00269 * 00270 NB = 1 00271 * 00272 IF( C2.EQ.'GE' ) THEN 00273 IF( C3.EQ.'TRF' ) THEN 00274 IF( SNAME ) THEN 00275 NB = 64 00276 ELSE 00277 NB = 64 00278 END IF 00279 ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. 00280 $ C3.EQ.'QLF' ) THEN 00281 IF( SNAME ) THEN 00282 NB = 32 00283 ELSE 00284 NB = 32 00285 END IF 00286 ELSE IF( C3.EQ.'HRD' ) THEN 00287 IF( SNAME ) THEN 00288 NB = 32 00289 ELSE 00290 NB = 32 00291 END IF 00292 ELSE IF( C3.EQ.'BRD' ) THEN 00293 IF( SNAME ) THEN 00294 NB = 32 00295 ELSE 00296 NB = 32 00297 END IF 00298 ELSE IF( C3.EQ.'TRI' ) THEN 00299 IF( SNAME ) THEN 00300 NB = 64 00301 ELSE 00302 NB = 64 00303 END IF 00304 END IF 00305 ELSE IF( C2.EQ.'PO' ) THEN 00306 IF( C3.EQ.'TRF' ) THEN 00307 IF( SNAME ) THEN 00308 NB = 64 00309 ELSE 00310 NB = 64 00311 END IF 00312 END IF 00313 ELSE IF( C2.EQ.'SY' ) THEN 00314 IF( C3.EQ.'TRF' ) THEN 00315 IF( SNAME ) THEN 00316 NB = 64 00317 ELSE 00318 NB = 64 00319 END IF 00320 ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN 00321 NB = 32 00322 ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN 00323 NB = 64 00324 END IF 00325 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN 00326 IF( C3.EQ.'TRF' ) THEN 00327 NB = 64 00328 ELSE IF( C3.EQ.'TRD' ) THEN 00329 NB = 32 00330 ELSE IF( C3.EQ.'GST' ) THEN 00331 NB = 64 00332 END IF 00333 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN 00334 IF( C3( 1: 1 ).EQ.'G' ) THEN 00335 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00336 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00337 $ THEN 00338 NB = 32 00339 END IF 00340 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN 00341 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00342 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00343 $ THEN 00344 NB = 32 00345 END IF 00346 END IF 00347 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN 00348 IF( C3( 1: 1 ).EQ.'G' ) THEN 00349 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00350 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00351 $ THEN 00352 NB = 32 00353 END IF 00354 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN 00355 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00356 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00357 $ THEN 00358 NB = 32 00359 END IF 00360 END IF 00361 ELSE IF( C2.EQ.'GB' ) THEN 00362 IF( C3.EQ.'TRF' ) THEN 00363 IF( SNAME ) THEN 00364 IF( N4.LE.64 ) THEN 00365 NB = 1 00366 ELSE 00367 NB = 32 00368 END IF 00369 ELSE 00370 IF( N4.LE.64 ) THEN 00371 NB = 1 00372 ELSE 00373 NB = 32 00374 END IF 00375 END IF 00376 END IF 00377 ELSE IF( C2.EQ.'PB' ) THEN 00378 IF( C3.EQ.'TRF' ) THEN 00379 IF( SNAME ) THEN 00380 IF( N2.LE.64 ) THEN 00381 NB = 1 00382 ELSE 00383 NB = 32 00384 END IF 00385 ELSE 00386 IF( N2.LE.64 ) THEN 00387 NB = 1 00388 ELSE 00389 NB = 32 00390 END IF 00391 END IF 00392 END IF 00393 ELSE IF( C2.EQ.'TR' ) THEN 00394 IF( C3.EQ.'TRI' ) THEN 00395 IF( SNAME ) THEN 00396 NB = 64 00397 ELSE 00398 NB = 64 00399 END IF 00400 END IF 00401 ELSE IF( C2.EQ.'LA' ) THEN 00402 IF( C3.EQ.'UUM' ) THEN 00403 IF( SNAME ) THEN 00404 NB = 64 00405 ELSE 00406 NB = 64 00407 END IF 00408 END IF 00409 ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN 00410 IF( C3.EQ.'EBZ' ) THEN 00411 NB = 1 00412 END IF 00413 END IF 00414 ILAENV = NB 00415 RETURN 00416 * 00417 60 CONTINUE 00418 * 00419 * ISPEC = 2: minimum block size 00420 * 00421 NBMIN = 2 00422 IF( C2.EQ.'GE' ) THEN 00423 IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. 00424 $ 'QLF' ) THEN 00425 IF( SNAME ) THEN 00426 NBMIN = 2 00427 ELSE 00428 NBMIN = 2 00429 END IF 00430 ELSE IF( C3.EQ.'HRD' ) THEN 00431 IF( SNAME ) THEN 00432 NBMIN = 2 00433 ELSE 00434 NBMIN = 2 00435 END IF 00436 ELSE IF( C3.EQ.'BRD' ) THEN 00437 IF( SNAME ) THEN 00438 NBMIN = 2 00439 ELSE 00440 NBMIN = 2 00441 END IF 00442 ELSE IF( C3.EQ.'TRI' ) THEN 00443 IF( SNAME ) THEN 00444 NBMIN = 2 00445 ELSE 00446 NBMIN = 2 00447 END IF 00448 END IF 00449 ELSE IF( C2.EQ.'SY' ) THEN 00450 IF( C3.EQ.'TRF' ) THEN 00451 IF( SNAME ) THEN 00452 NBMIN = 8 00453 ELSE 00454 NBMIN = 8 00455 END IF 00456 ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN 00457 NBMIN = 2 00458 END IF 00459 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN 00460 IF( C3.EQ.'TRD' ) THEN 00461 NBMIN = 2 00462 END IF 00463 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN 00464 IF( C3( 1: 1 ).EQ.'G' ) THEN 00465 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00466 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00467 $ THEN 00468 NBMIN = 2 00469 END IF 00470 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN 00471 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00472 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00473 $ THEN 00474 NBMIN = 2 00475 END IF 00476 END IF 00477 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN 00478 IF( C3( 1: 1 ).EQ.'G' ) THEN 00479 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00480 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00481 $ THEN 00482 NBMIN = 2 00483 END IF 00484 ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN 00485 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00486 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00487 $ THEN 00488 NBMIN = 2 00489 END IF 00490 END IF 00491 END IF 00492 ILAENV = NBMIN 00493 RETURN 00494 * 00495 70 CONTINUE 00496 * 00497 * ISPEC = 3: crossover point 00498 * 00499 NX = 0 00500 IF( C2.EQ.'GE' ) THEN 00501 IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. 00502 $ 'QLF' ) THEN 00503 IF( SNAME ) THEN 00504 NX = 128 00505 ELSE 00506 NX = 128 00507 END IF 00508 ELSE IF( C3.EQ.'HRD' ) THEN 00509 IF( SNAME ) THEN 00510 NX = 128 00511 ELSE 00512 NX = 128 00513 END IF 00514 ELSE IF( C3.EQ.'BRD' ) THEN 00515 IF( SNAME ) THEN 00516 NX = 128 00517 ELSE 00518 NX = 128 00519 END IF 00520 END IF 00521 ELSE IF( C2.EQ.'SY' ) THEN 00522 IF( SNAME .AND. C3.EQ.'TRD' ) THEN 00523 NX = 32 00524 END IF 00525 ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN 00526 IF( C3.EQ.'TRD' ) THEN 00527 NX = 32 00528 END IF 00529 ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN 00530 IF( C3( 1: 1 ).EQ.'G' ) THEN 00531 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00532 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00533 $ THEN 00534 NX = 128 00535 END IF 00536 END IF 00537 ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN 00538 IF( C3( 1: 1 ).EQ.'G' ) THEN 00539 IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. 00540 $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) 00541 $ THEN 00542 NX = 128 00543 END IF 00544 END IF 00545 END IF 00546 ILAENV = NX 00547 RETURN 00548 * 00549 80 CONTINUE 00550 * 00551 * ISPEC = 4: number of shifts (used by xHSEQR) 00552 * 00553 ILAENV = 6 00554 RETURN 00555 * 00556 90 CONTINUE 00557 * 00558 * ISPEC = 5: minimum column dimension (not used) 00559 * 00560 ILAENV = 2 00561 RETURN 00562 * 00563 100 CONTINUE 00564 * 00565 * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) 00566 * 00567 ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) 00568 RETURN 00569 * 00570 110 CONTINUE 00571 * 00572 * ISPEC = 7: number of processors (not used) 00573 * 00574 ILAENV = 1 00575 RETURN 00576 * 00577 120 CONTINUE 00578 * 00579 * ISPEC = 8: crossover point for multishift (used by xHSEQR) 00580 * 00581 ILAENV = 50 00582 RETURN 00583 * 00584 130 CONTINUE 00585 * 00586 * ISPEC = 9: maximum size of the subproblems at the bottom of the 00587 * computation tree in the divide-and-conquer algorithm 00588 * (used by xGELSD and xGESDD) 00589 * 00590 ILAENV = 25 00591 RETURN 00592 * 00593 140 CONTINUE 00594 * 00595 * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap 00596 * 00597 * ILAENV = 0 00598 ILAENV = 1 00599 IF( ILAENV.EQ.1 ) THEN 00600 ILAENV = IEEECK( 1, 0.0, 1.0 ) 00601 END IF 00602 RETURN 00603 * 00604 150 CONTINUE 00605 * 00606 * ISPEC = 11: infinity arithmetic can be trusted not to trap 00607 * 00608 * ILAENV = 0 00609 ILAENV = 1 00610 IF( ILAENV.EQ.1 ) THEN 00611 ILAENV = IEEECK( 0, 0.0, 1.0 ) 00612 END IF 00613 RETURN 00614 * 00615 160 CONTINUE 00616 * 00617 * 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. 00618 * 00619 ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) 00620 RETURN 00621 * 00622 * End of ILAENV 00623 * 00624 END