LAPACK  3.4.1
LAPACK: Linear Algebra PACKage
ilaenv.f
Go to the documentation of this file.
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
 All Files Functions