version 1.2, 2010/04/21 13:45:27
|
version 1.20, 2023/08/07 08:39:14
|
Line 1
|
Line 1
|
INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) |
*> \brief \b ILAENV |
|
* |
|
* =========== DOCUMENTATION =========== |
* |
* |
* -- LAPACK auxiliary routine (version 3.2.1) -- |
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
* |
* |
* -- April 2009 -- |
*> \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 OTHERauxiliary |
|
* |
|
*> \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, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* |
* |
Line 12
|
Line 169
|
INTEGER ISPEC, N1, N2, N3, N4 |
INTEGER ISPEC, N1, N2, N3, N4 |
* .. |
* .. |
* |
* |
* Purpose |
|
* ======= |
|
* |
|
* 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. |
|
* |
|
* Arguments |
|
* ========= |
|
* |
|
* ISPEC (input) 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 NaN arithmetic can be trusted not to trap |
|
* =11: infinity arithmetic can be trusted not to trap |
|
* 12 <= ISPEC <= 16: |
|
* xHSEQR or one of its subroutines, |
|
* see IPARMQ for detailed explanation |
|
* |
|
* NAME (input) CHARACTER*(*) |
|
* The name of the calling subroutine, in either upper case or |
|
* lower case. |
|
* |
|
* OPTS (input) 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'. |
|
* |
|
* N1 (input) INTEGER |
|
* N2 (input) INTEGER |
|
* N3 (input) INTEGER |
|
* N4 (input) INTEGER |
|
* Problem dimensions for the subroutine NAME; these may not all |
|
* be required. |
|
* |
|
* Further Details |
|
* =============== |
|
* |
|
* 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 ) |
|
* |
|
* ===================================================================== |
* ===================================================================== |
* |
* |
* .. Local Scalars .. |
* .. Local Scalars .. |
INTEGER I, IC, IZ, NB, NBMIN, NX |
INTEGER I, IC, IZ, NB, NBMIN, NX |
LOGICAL CNAME, SNAME |
LOGICAL CNAME, SNAME, TWOSTAGE |
CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 |
CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*16 |
* .. |
* .. |
* .. Intrinsic Functions .. |
* .. Intrinsic Functions .. |
INTRINSIC CHAR, ICHAR, INT, MIN, REAL |
INTRINSIC CHAR, ICHAR, INT, MIN, REAL |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
INTEGER IEEECK, IPARMQ |
INTEGER IEEECK, IPARMQ, IPARAM2STAGE |
EXTERNAL IEEECK, IPARMQ |
EXTERNAL IEEECK, IPARMQ, IPARAM2STAGE |
* .. |
* .. |
* .. Executable Statements .. |
* .. Executable Statements .. |
* |
* |
GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, |
GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, |
$ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC |
$ 130, 140, 150, 160, 160, 160, 160, 160, 160)ISPEC |
* |
* |
* Invalid value for ISPEC |
* Invalid value for ISPEC |
* |
* |
Line 187
|
Line 253
|
C2 = SUBNAM( 2: 3 ) |
C2 = SUBNAM( 2: 3 ) |
C3 = SUBNAM( 4: 6 ) |
C3 = SUBNAM( 4: 6 ) |
C4 = C3( 2: 3 ) |
C4 = C3( 2: 3 ) |
|
TWOSTAGE = LEN( SUBNAM ).GE.11 |
|
$ .AND. SUBNAM( 11: 11 ).EQ.'2' |
* |
* |
GO TO ( 50, 60, 70 )ISPEC |
GO TO ( 50, 60, 70 )ISPEC |
* |
* |
Line 200
|
Line 268
|
* |
* |
NB = 1 |
NB = 1 |
* |
* |
IF( C2.EQ.'GE' ) THEN |
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( C3.EQ.'TRF' ) THEN |
IF( SNAME ) THEN |
IF( SNAME ) THEN |
NB = 64 |
NB = 64 |
Line 214
|
Line 291
|
ELSE |
ELSE |
NB = 32 |
NB = 32 |
END IF |
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 |
ELSE IF( C3.EQ.'HRD' ) THEN |
IF( SNAME ) THEN |
IF( SNAME ) THEN |
NB = 32 |
NB = 32 |
Line 244
|
Line 367
|
ELSE IF( C2.EQ.'SY' ) THEN |
ELSE IF( C2.EQ.'SY' ) THEN |
IF( C3.EQ.'TRF' ) THEN |
IF( C3.EQ.'TRF' ) THEN |
IF( SNAME ) THEN |
IF( SNAME ) THEN |
NB = 64 |
IF( TWOSTAGE ) THEN |
|
NB = 192 |
|
ELSE |
|
NB = 64 |
|
END IF |
ELSE |
ELSE |
NB = 64 |
IF( TWOSTAGE ) THEN |
|
NB = 192 |
|
ELSE |
|
NB = 64 |
|
END IF |
END IF |
END IF |
ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN |
ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN |
NB = 32 |
NB = 32 |
Line 255
|
Line 386
|
END IF |
END IF |
ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN |
IF( C3.EQ.'TRF' ) THEN |
IF( C3.EQ.'TRF' ) THEN |
NB = 64 |
IF( TWOSTAGE ) THEN |
|
NB = 192 |
|
ELSE |
|
NB = 64 |
|
END IF |
ELSE IF( C3.EQ.'TRD' ) THEN |
ELSE IF( C3.EQ.'TRD' ) THEN |
NB = 32 |
NB = 32 |
ELSE IF( C3.EQ.'GST' ) THEN |
ELSE IF( C3.EQ.'GST' ) THEN |
Line 328
|
Line 463
|
ELSE |
ELSE |
NB = 64 |
NB = 64 |
END IF |
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 |
END IF |
ELSE IF( C2.EQ.'LA' ) THEN |
ELSE IF( C2.EQ.'LA' ) THEN |
IF( C3.EQ.'UUM' ) THEN |
IF( C3.EQ.'UUM' ) THEN |
Line 336
|
Line 486
|
ELSE |
ELSE |
NB = 64 |
NB = 64 |
END IF |
END IF |
|
ELSE IF( C3.EQ.'TRS' ) THEN |
|
IF( SNAME ) THEN |
|
NB = 32 |
|
ELSE |
|
NB = 32 |
|
END IF |
END IF |
END IF |
ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN |
ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN |
IF( C3.EQ.'EBZ' ) THEN |
IF( C3.EQ.'EBZ' ) THEN |
NB = 1 |
NB = 1 |
END IF |
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 |
END IF |
ILAENV = NB |
ILAENV = NB |
RETURN |
RETURN |
Line 419
|
Line 584
|
NBMIN = 2 |
NBMIN = 2 |
END IF |
END IF |
END IF |
END IF |
|
ELSE IF( C2.EQ.'GG' ) THEN |
|
NBMIN = 2 |
|
IF( C3.EQ.'HD3' ) THEN |
|
NBMIN = 2 |
|
END IF |
END IF |
END IF |
ILAENV = NBMIN |
ILAENV = NBMIN |
RETURN |
RETURN |
Line 473
|
Line 643
|
NX = 128 |
NX = 128 |
END IF |
END IF |
END IF |
END IF |
|
ELSE IF( C2.EQ.'GG' ) THEN |
|
NX = 128 |
|
IF( C3.EQ.'HD3' ) THEN |
|
NX = 128 |
|
END IF |
END IF |
END IF |
ILAENV = NX |
ILAENV = NX |
RETURN |
RETURN |
Line 523
|
Line 698
|
* |
* |
140 CONTINUE |
140 CONTINUE |
* |
* |
* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap |
* ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap |
* |
* |
* ILAENV = 0 |
* ILAENV = 0 |
ILAENV = 1 |
ILAENV = 1 |
Line 534
|
Line 709
|
* |
* |
150 CONTINUE |
150 CONTINUE |
* |
* |
* ISPEC = 11: infinity arithmetic can be trusted not to trap |
* ISPEC = 11: ieee infinity arithmetic can be trusted not to trap |
* |
* |
* ILAENV = 0 |
* ILAENV = 0 |
ILAENV = 1 |
ILAENV = 1 |
Line 545
|
Line 720
|
* |
* |
160 CONTINUE |
160 CONTINUE |
* |
* |
* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. |
* 12 <= ISPEC <= 17: xHSEQR or related subroutines. |
* |
* |
ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) |
ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) |
RETURN |
RETURN |