|
- *> \brief \b ILAENV
- *
- * =========== DOCUMENTATION ===========
- *
- * Online html documentation available at
- * http://www.netlib.org/lapack/explore-html/
- *
- *> \htmlonly
- *> Download ILAENV + dependencies
- *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaenv.f">
- *> [TGZ]</a>
- *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaenv.f">
- *> [ZIP]</a>
- *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaenv.f">
- *> [TXT]</a>
- *> \endhtmlonly
- *
- * Definition:
- * ===========
- *
- * INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
- *
- * .. Scalar Arguments ..
- * CHARACTER*( * ) NAME, OPTS
- * INTEGER ISPEC, N1, N2, N3, N4
- * ..
- *
- *
- *> \par Purpose:
- * =============
- *>
- *> \verbatim
- *>
- *> ILAENV is called from the LAPACK routines to choose problem-dependent
- *> parameters for the local environment. See ISPEC for a description of
- *> the parameters.
- *>
- *> ILAENV returns an INTEGER
- *> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
- *> if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value.
- *>
- *> This version provides a set of parameters which should give good,
- *> but not optimal, performance on many of the currently available
- *> computers. Users are encouraged to modify this subroutine to set
- *> the tuning parameters for their particular machine using the option
- *> and problem size information in the arguments.
- *>
- *> This routine will not function correctly if it is converted to all
- *> lower case. Converting it to all upper case is allowed.
- *> \endverbatim
- *
- * Arguments:
- * ==========
- *
- *> \param[in] ISPEC
- *> \verbatim
- *> ISPEC is INTEGER
- *> Specifies the parameter to be returned as the value of
- *> ILAENV.
- *> = 1: the optimal blocksize; if this value is 1, an unblocked
- *> algorithm will give the best performance.
- *> = 2: the minimum block size for which the block routine
- *> should be used; if the usable block size is less than
- *> this value, an unblocked routine should be used.
- *> = 3: the crossover point (in a block routine, for N less
- *> than this value, an unblocked routine should be used)
- *> = 4: the number of shifts, used in the nonsymmetric
- *> eigenvalue routines (DEPRECATED)
- *> = 5: the minimum column dimension for blocking to be used;
- *> rectangular blocks must have dimension at least k by m,
- *> where k is given by ILAENV(2,...) and m by ILAENV(5,...)
- *> = 6: the crossover point for the SVD (when reducing an m by n
- *> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
- *> this value, a QR factorization is used first to reduce
- *> the matrix to a triangular form.)
- *> = 7: the number of processors
- *> = 8: the crossover point for the multishift QR method
- *> for nonsymmetric eigenvalue problems (DEPRECATED)
- *> = 9: maximum size of the subproblems at the bottom of the
- *> computation tree in the divide-and-conquer algorithm
- *> (used by xGELSD and xGESDD)
- *> =10: ieee infinity and NaN arithmetic can be trusted not to trap
- *> =11: infinity arithmetic can be trusted not to trap
- *> 12 <= ISPEC <= 17:
- *> xHSEQR or related subroutines,
- *> see IPARMQ for detailed explanation
- *> \endverbatim
- *>
- *> \param[in] NAME
- *> \verbatim
- *> NAME is CHARACTER*(*)
- *> The name of the calling subroutine, in either upper case or
- *> lower case.
- *> \endverbatim
- *>
- *> \param[in] OPTS
- *> \verbatim
- *> OPTS is CHARACTER*(*)
- *> The character options to the subroutine NAME, concatenated
- *> into a single character string. For example, UPLO = 'U',
- *> TRANS = 'T', and DIAG = 'N' for a triangular routine would
- *> be specified as OPTS = 'UTN'.
- *> \endverbatim
- *>
- *> \param[in] N1
- *> \verbatim
- *> N1 is INTEGER
- *> \endverbatim
- *>
- *> \param[in] N2
- *> \verbatim
- *> N2 is INTEGER
- *> \endverbatim
- *>
- *> \param[in] N3
- *> \verbatim
- *> N3 is INTEGER
- *> \endverbatim
- *>
- *> \param[in] N4
- *> \verbatim
- *> N4 is INTEGER
- *> Problem dimensions for the subroutine NAME; these may not all
- *> be required.
- *> \endverbatim
- *
- * Authors:
- * ========
- *
- *> \author Univ. of Tennessee
- *> \author Univ. of California Berkeley
- *> \author Univ. of Colorado Denver
- *> \author NAG Ltd.
- *
- *> \ingroup ilaenv
- *
- *> \par Further Details:
- * =====================
- *>
- *> \verbatim
- *>
- *> The following conventions have been used when calling ILAENV from the
- *> LAPACK routines:
- *> 1) OPTS is a concatenation of all of the character options to
- *> subroutine NAME, in the same order that they appear in the
- *> argument list for NAME, even if they are not used in determining
- *> the value of the parameter specified by ISPEC.
- *> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
- *> that they appear in the argument list for NAME. N1 is used
- *> first, N2 second, and so on, and unused problem dimensions are
- *> passed a value of -1.
- *> 3) The parameter value returned by ILAENV is checked for validity in
- *> the calling subroutine. For example, ILAENV is used to retrieve
- *> the optimal blocksize for STRTRI as follows:
- *>
- *> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
- *> IF( NB.LE.1 ) NB = MAX( 1, N )
- *> \endverbatim
- *>
- * =====================================================================
- INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
- *
- * -- LAPACK auxiliary routine --
- * -- LAPACK is a software package provided by Univ. of Tennessee, --
- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
- *
- * .. Scalar Arguments ..
- CHARACTER*( * ) NAME, OPTS
- INTEGER ISPEC, N1, N2, N3, N4
- * ..
- *
- * =====================================================================
- *
- * .. Local Scalars ..
- INTEGER I, IC, IZ, NB, NBMIN, NX
- LOGICAL CNAME, SNAME, TWOSTAGE
- CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*16
- * ..
- * .. Intrinsic Functions ..
- INTRINSIC CHAR, ICHAR, INT, MIN, REAL
- * ..
- * .. External Functions ..
- INTEGER IEEECK, IPARMQ, IPARAM2STAGE
- EXTERNAL IEEECK, IPARMQ, IPARAM2STAGE
- * ..
- * .. Executable Statements ..
- *
- GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
- $ 130, 140, 150, 160, 160, 160, 160, 160, 160)ISPEC
- *
- * Invalid value for ISPEC
- *
- ILAENV = -1
- RETURN
- *
- 10 CONTINUE
- *
- * Convert NAME to upper case if the first character is lower case.
- *
- ILAENV = 1
- SUBNAM = NAME
- IC = ICHAR( SUBNAM( 1: 1 ) )
- IZ = ICHAR( 'Z' )
- IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
- *
- * ASCII character set
- *
- IF( IC.GE.97 .AND. IC.LE.122 ) THEN
- SUBNAM( 1: 1 ) = CHAR( IC-32 )
- DO 20 I = 2, 6
- IC = ICHAR( SUBNAM( I: I ) )
- IF( IC.GE.97 .AND. IC.LE.122 )
- $ SUBNAM( I: I ) = CHAR( IC-32 )
- 20 CONTINUE
- END IF
- *
- ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
- *
- * EBCDIC character set
- *
- IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
- $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
- $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
- SUBNAM( 1: 1 ) = CHAR( IC+64 )
- DO 30 I = 2, 6
- IC = ICHAR( SUBNAM( I: I ) )
- IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
- $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
- $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
- $ I ) = CHAR( IC+64 )
- 30 CONTINUE
- END IF
- *
- ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
- *
- * Prime machines: ASCII+128
- *
- IF( IC.GE.225 .AND. IC.LE.250 ) THEN
- SUBNAM( 1: 1 ) = CHAR( IC-32 )
- DO 40 I = 2, 6
- IC = ICHAR( SUBNAM( I: I ) )
- IF( IC.GE.225 .AND. IC.LE.250 )
- $ SUBNAM( I: I ) = CHAR( IC-32 )
- 40 CONTINUE
- END IF
- END IF
- *
- C1 = SUBNAM( 1: 1 )
- SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
- CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
- IF( .NOT.( CNAME .OR. SNAME ) )
- $ RETURN
- C2 = SUBNAM( 2: 3 )
- C3 = SUBNAM( 4: 6 )
- C4 = C3( 2: 3 )
- TWOSTAGE = LEN( SUBNAM ).GE.11
- $ .AND. SUBNAM( 11: 11 ).EQ.'2'
- *
- GO TO ( 50, 60, 70 )ISPEC
- *
- 50 CONTINUE
- *
- * ISPEC = 1: block size
- *
- * In these examples, separate code is provided for setting NB for
- * real and complex. We assume that NB will take the same value in
- * single or double precision.
- *
- NB = 1
- *
- IF( SUBNAM(2:6).EQ.'LAORH' ) THEN
- *
- * This is for *LAORHR_GETRFNP routine
- *
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- ELSE IF( C2.EQ.'GE' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( SNAME ) THEN
- NB = 64
- ELSE
- NB = 64
- END IF
- ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
- $ C3.EQ.'QLF' ) THEN
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- ELSE IF( C3.EQ.'QR ') THEN
- IF( N3 .EQ. 1) THEN
- IF( SNAME ) THEN
- * M*N
- IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
- NB = N1
- ELSE
- NB = 32768/N2
- END IF
- ELSE
- IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
- NB = N1
- ELSE
- NB = 32768/N2
- END IF
- END IF
- ELSE
- IF( SNAME ) THEN
- NB = 1
- ELSE
- NB = 1
- END IF
- END IF
- ELSE IF( C3.EQ.'LQ ') THEN
- IF( N3 .EQ. 2) THEN
- IF( SNAME ) THEN
- * M*N
- IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
- NB = N1
- ELSE
- NB = 32768/N2
- END IF
- ELSE
- IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
- NB = N1
- ELSE
- NB = 32768/N2
- END IF
- END IF
- ELSE
- IF( SNAME ) THEN
- NB = 1
- ELSE
- NB = 1
- END IF
- END IF
- ELSE IF( C3.EQ.'HRD' ) THEN
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- ELSE IF( C3.EQ.'BRD' ) THEN
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- ELSE IF( C3.EQ.'TRI' ) THEN
- IF( SNAME ) THEN
- NB = 64
- ELSE
- NB = 64
- END IF
- ELSE IF( SUBNAM( 4: 7 ).EQ.'QP3RK' ) THEN
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- END IF
- ELSE IF( C2.EQ.'PO' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( SNAME ) THEN
- NB = 64
- ELSE
- NB = 64
- END IF
- END IF
- ELSE IF( C2.EQ.'SY' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( SNAME ) THEN
- IF( TWOSTAGE ) THEN
- NB = 192
- ELSE
- NB = 64
- END IF
- ELSE
- IF( TWOSTAGE ) THEN
- NB = 192
- ELSE
- NB = 64
- END IF
- END IF
- ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
- NB = 32
- ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
- NB = 64
- END IF
- ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( TWOSTAGE ) THEN
- NB = 192
- ELSE
- NB = 64
- END IF
- ELSE IF( C3.EQ.'TRD' ) THEN
- NB = 32
- ELSE IF( C3.EQ.'GST' ) THEN
- NB = 64
- END IF
- ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
- IF( C3( 1: 1 ).EQ.'G' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NB = 32
- END IF
- ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NB = 32
- END IF
- END IF
- ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
- IF( C3( 1: 1 ).EQ.'G' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NB = 32
- END IF
- ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NB = 32
- END IF
- END IF
- ELSE IF( C2.EQ.'GB' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( SNAME ) THEN
- IF( N4.LE.64 ) THEN
- NB = 1
- ELSE
- NB = 32
- END IF
- ELSE
- IF( N4.LE.64 ) THEN
- NB = 1
- ELSE
- NB = 32
- END IF
- END IF
- END IF
- ELSE IF( C2.EQ.'PB' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( SNAME ) THEN
- IF( N2.LE.64 ) THEN
- NB = 1
- ELSE
- NB = 32
- END IF
- ELSE
- IF( N2.LE.64 ) THEN
- NB = 1
- ELSE
- NB = 32
- END IF
- END IF
- END IF
- ELSE IF( C2.EQ.'TR' ) THEN
- IF( C3.EQ.'TRI' ) THEN
- IF( SNAME ) THEN
- NB = 64
- ELSE
- NB = 64
- END IF
- ELSE IF ( C3.EQ.'EVC' ) THEN
- IF( SNAME ) THEN
- NB = 64
- ELSE
- NB = 64
- END IF
- ELSE IF( C3.EQ.'SYL' ) THEN
- * The upper bound is to prevent overly aggressive scaling.
- IF( SNAME ) THEN
- NB = MIN( MAX( 48, INT( ( MIN( N1, N2 ) * 16 ) / 100) ),
- $ 240 )
- ELSE
- NB = MIN( MAX( 24, INT( ( MIN( N1, N2 ) * 8 ) / 100) ),
- $ 80 )
- END IF
- END IF
- ELSE IF( C2.EQ.'LA' ) THEN
- IF( C3.EQ.'UUM' ) THEN
- IF( SNAME ) THEN
- NB = 64
- ELSE
- NB = 64
- END IF
- ELSE IF( C3.EQ.'TRS' ) THEN
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- END IF
- ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
- IF( C3.EQ.'EBZ' ) THEN
- NB = 1
- END IF
- ELSE IF( C2.EQ.'GG' ) THEN
- NB = 32
- IF( C3.EQ.'HD3' ) THEN
- IF( SNAME ) THEN
- NB = 32
- ELSE
- NB = 32
- END IF
- END IF
- END IF
- ILAENV = NB
- RETURN
- *
- 60 CONTINUE
- *
- * ISPEC = 2: minimum block size
- *
- NBMIN = 2
- IF( C2.EQ.'GE' ) THEN
- IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
- $ 'QLF' ) THEN
- IF( SNAME ) THEN
- NBMIN = 2
- ELSE
- NBMIN = 2
- END IF
- ELSE IF( C3.EQ.'HRD' ) THEN
- IF( SNAME ) THEN
- NBMIN = 2
- ELSE
- NBMIN = 2
- END IF
- ELSE IF( C3.EQ.'BRD' ) THEN
- IF( SNAME ) THEN
- NBMIN = 2
- ELSE
- NBMIN = 2
- END IF
- ELSE IF( C3.EQ.'TRI' ) THEN
- IF( SNAME ) THEN
- NBMIN = 2
- ELSE
- NBMIN = 2
- END IF
- ELSE IF( SUBNAM( 4: 7 ).EQ.'QP3RK' ) THEN
- IF( SNAME ) THEN
- NBMIN = 2
- ELSE
- NBMIN = 2
- END IF
- END IF
-
- ELSE IF( C2.EQ.'SY' ) THEN
- IF( C3.EQ.'TRF' ) THEN
- IF( SNAME ) THEN
- NBMIN = 8
- ELSE
- NBMIN = 8
- END IF
- ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
- NBMIN = 2
- END IF
- ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
- IF( C3.EQ.'TRD' ) THEN
- NBMIN = 2
- END IF
- ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
- IF( C3( 1: 1 ).EQ.'G' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NBMIN = 2
- END IF
- ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NBMIN = 2
- END IF
- END IF
- ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
- IF( C3( 1: 1 ).EQ.'G' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NBMIN = 2
- END IF
- ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NBMIN = 2
- END IF
- END IF
- ELSE IF( C2.EQ.'GG' ) THEN
- NBMIN = 2
- IF( C3.EQ.'HD3' ) THEN
- NBMIN = 2
- END IF
- END IF
- ILAENV = NBMIN
- RETURN
- *
- 70 CONTINUE
- *
- * ISPEC = 3: crossover point
- *
- NX = 0
- IF( C2.EQ.'GE' ) THEN
- IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
- $ 'QLF' ) THEN
- IF( SNAME ) THEN
- NX = 128
- ELSE
- NX = 128
- END IF
- ELSE IF( C3.EQ.'HRD' ) THEN
- IF( SNAME ) THEN
- NX = 128
- ELSE
- NX = 128
- END IF
- ELSE IF( C3.EQ.'BRD' ) THEN
- IF( SNAME ) THEN
- NX = 128
- ELSE
- NX = 128
- END IF
- ELSE IF( SUBNAM( 4: 7 ).EQ.'QP3RK' ) THEN
- IF( SNAME ) THEN
- NX = 128
- ELSE
- NX = 128
- END IF
- END IF
- ELSE IF( C2.EQ.'SY' ) THEN
- IF( SNAME .AND. C3.EQ.'TRD' ) THEN
- NX = 32
- END IF
- ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
- IF( C3.EQ.'TRD' ) THEN
- NX = 32
- END IF
- ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
- IF( C3( 1: 1 ).EQ.'G' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NX = 128
- END IF
- END IF
- ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
- IF( C3( 1: 1 ).EQ.'G' ) THEN
- IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
- $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
- $ THEN
- NX = 128
- END IF
- END IF
- ELSE IF( C2.EQ.'GG' ) THEN
- NX = 128
- IF( C3.EQ.'HD3' ) THEN
- NX = 128
- END IF
- END IF
- ILAENV = NX
- RETURN
- *
- 80 CONTINUE
- *
- * ISPEC = 4: number of shifts (used by xHSEQR)
- *
- ILAENV = 6
- RETURN
- *
- 90 CONTINUE
- *
- * ISPEC = 5: minimum column dimension (not used)
- *
- ILAENV = 2
- RETURN
- *
- 100 CONTINUE
- *
- * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD)
- *
- ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
- RETURN
- *
- 110 CONTINUE
- *
- * ISPEC = 7: number of processors (not used)
- *
- ILAENV = 1
- RETURN
- *
- 120 CONTINUE
- *
- * ISPEC = 8: crossover point for multishift (used by xHSEQR)
- *
- ILAENV = 50
- RETURN
- *
- 130 CONTINUE
- *
- * ISPEC = 9: maximum size of the subproblems at the bottom of the
- * computation tree in the divide-and-conquer algorithm
- * (used by xGELSD and xGESDD)
- *
- ILAENV = 25
- RETURN
- *
- 140 CONTINUE
- *
- * ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap
- *
- * ILAENV = 0
- ILAENV = 1
- IF( ILAENV.EQ.1 ) THEN
- ILAENV = IEEECK( 1, 0.0, 1.0 )
- END IF
- RETURN
- *
- 150 CONTINUE
- *
- * ISPEC = 11: ieee infinity arithmetic can be trusted not to trap
- *
- * ILAENV = 0
- ILAENV = 1
- IF( ILAENV.EQ.1 ) THEN
- ILAENV = IEEECK( 0, 0.0, 1.0 )
- END IF
- RETURN
- *
- 160 CONTINUE
- *
- * 12 <= ISPEC <= 17: xHSEQR or related subroutines.
- *
- ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
- RETURN
- *
- * End of ILAENV
- *
- END
|