Diff for /rpl/lapack/lapack/ilaenv.f between versions 1.5 and 1.19

version 1.5, 2010/08/07 13:22:29 version 1.19, 2020/05/21 21:46:03
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 NaN arithmetic can be trusted not to trap
   *>          =11: infinity arithmetic can be trusted not to trap
   *>          12 <= ISPEC <= 16:
   *>               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.
   *
   *> \date November 2019
   *
   *> \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 (version 3.9.0) --
 *  -- 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..--
   *     November 2019
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER*( * )    NAME, OPTS        CHARACTER*( * )    NAME, OPTS
       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)ISPEC
 *  *
 *     Invalid value for ISPEC  *     Invalid value for ISPEC
 *  *
Line 187 Line 256
       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 271
 *  *
       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 294
             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 370
       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 389
          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 466
             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
          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 341 Line 485
          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 572
                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 631
                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 545 Line 708
 *  *
   160 CONTINUE    160 CONTINUE
 *  *
 *     12 <= ISPEC <= 16: xHSEQR or one of its subroutines.   *     12 <= ISPEC <= 16: xHSEQR or related subroutines.
 *  *
       ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )        ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
       RETURN        RETURN

Removed from v.1.5  
changed lines
  Added in v.1.19


CVSweb interface <joel.bertrand@systella.fr>