File:  [local] / rpl / lapack / lapack / ilaenv.f
Revision 1.18: download - view: text, annotated - select for diffs - revision graph
Tue May 29 07:18:12 2018 UTC (5 years, 11 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_31, rpl-4_1_30, rpl-4_1_29, rpl-4_1_28, HEAD
Mise à jour de Lapack.

    1: *> \brief \b ILAENV
    2: *
    3: *  =========== DOCUMENTATION ===========
    4: *
    5: * Online html documentation available at
    6: *            http://www.netlib.org/lapack/explore-html/
    7: *
    8: *> \htmlonly
    9: *> Download ILAENV + dependencies
   10: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ilaenv.f">
   11: *> [TGZ]</a>
   12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ilaenv.f">
   13: *> [ZIP]</a>
   14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaenv.f">
   15: *> [TXT]</a>
   16: *> \endhtmlonly
   17: *
   18: *  Definition:
   19: *  ===========
   20: *
   21: *       INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
   22: *
   23: *       .. Scalar Arguments ..
   24: *       CHARACTER*( * )    NAME, OPTS
   25: *       INTEGER            ISPEC, N1, N2, N3, N4
   26: *       ..
   27: *
   28: *
   29: *> \par Purpose:
   30: *  =============
   31: *>
   32: *> \verbatim
   33: *>
   34: *> ILAENV is called from the LAPACK routines to choose problem-dependent
   35: *> parameters for the local environment.  See ISPEC for a description of
   36: *> the parameters.
   37: *>
   38: *> ILAENV returns an INTEGER
   39: *> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
   40: *> if ILAENV < 0:  if ILAENV = -k, the k-th argument had an illegal value.
   41: *>
   42: *> This version provides a set of parameters which should give good,
   43: *> but not optimal, performance on many of the currently available
   44: *> computers.  Users are encouraged to modify this subroutine to set
   45: *> the tuning parameters for their particular machine using the option
   46: *> and problem size information in the arguments.
   47: *>
   48: *> This routine will not function correctly if it is converted to all
   49: *> lower case.  Converting it to all upper case is allowed.
   50: *> \endverbatim
   51: *
   52: *  Arguments:
   53: *  ==========
   54: *
   55: *> \param[in] ISPEC
   56: *> \verbatim
   57: *>          ISPEC is INTEGER
   58: *>          Specifies the parameter to be returned as the value of
   59: *>          ILAENV.
   60: *>          = 1: the optimal blocksize; if this value is 1, an unblocked
   61: *>               algorithm will give the best performance.
   62: *>          = 2: the minimum block size for which the block routine
   63: *>               should be used; if the usable block size is less than
   64: *>               this value, an unblocked routine should be used.
   65: *>          = 3: the crossover point (in a block routine, for N less
   66: *>               than this value, an unblocked routine should be used)
   67: *>          = 4: the number of shifts, used in the nonsymmetric
   68: *>               eigenvalue routines (DEPRECATED)
   69: *>          = 5: the minimum column dimension for blocking to be used;
   70: *>               rectangular blocks must have dimension at least k by m,
   71: *>               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
   72: *>          = 6: the crossover point for the SVD (when reducing an m by n
   73: *>               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
   74: *>               this value, a QR factorization is used first to reduce
   75: *>               the matrix to a triangular form.)
   76: *>          = 7: the number of processors
   77: *>          = 8: the crossover point for the multishift QR method
   78: *>               for nonsymmetric eigenvalue problems (DEPRECATED)
   79: *>          = 9: maximum size of the subproblems at the bottom of the
   80: *>               computation tree in the divide-and-conquer algorithm
   81: *>               (used by xGELSD and xGESDD)
   82: *>          =10: ieee NaN arithmetic can be trusted not to trap
   83: *>          =11: infinity arithmetic can be trusted not to trap
   84: *>          12 <= ISPEC <= 16:
   85: *>               xHSEQR or related subroutines,
   86: *>               see IPARMQ for detailed explanation
   87: *> \endverbatim
   88: *>
   89: *> \param[in] NAME
   90: *> \verbatim
   91: *>          NAME is CHARACTER*(*)
   92: *>          The name of the calling subroutine, in either upper case or
   93: *>          lower case.
   94: *> \endverbatim
   95: *>
   96: *> \param[in] OPTS
   97: *> \verbatim
   98: *>          OPTS is CHARACTER*(*)
   99: *>          The character options to the subroutine NAME, concatenated
  100: *>          into a single character string.  For example, UPLO = 'U',
  101: *>          TRANS = 'T', and DIAG = 'N' for a triangular routine would
  102: *>          be specified as OPTS = 'UTN'.
  103: *> \endverbatim
  104: *>
  105: *> \param[in] N1
  106: *> \verbatim
  107: *>          N1 is INTEGER
  108: *> \endverbatim
  109: *>
  110: *> \param[in] N2
  111: *> \verbatim
  112: *>          N2 is INTEGER
  113: *> \endverbatim
  114: *>
  115: *> \param[in] N3
  116: *> \verbatim
  117: *>          N3 is INTEGER
  118: *> \endverbatim
  119: *>
  120: *> \param[in] N4
  121: *> \verbatim
  122: *>          N4 is INTEGER
  123: *>          Problem dimensions for the subroutine NAME; these may not all
  124: *>          be required.
  125: *> \endverbatim
  126: *
  127: *  Authors:
  128: *  ========
  129: *
  130: *> \author Univ. of Tennessee
  131: *> \author Univ. of California Berkeley
  132: *> \author Univ. of Colorado Denver
  133: *> \author NAG Ltd.
  134: *
  135: *> \date December 2016
  136: *
  137: *> \ingroup OTHERauxiliary
  138: *
  139: *> \par Further Details:
  140: *  =====================
  141: *>
  142: *> \verbatim
  143: *>
  144: *>  The following conventions have been used when calling ILAENV from the
  145: *>  LAPACK routines:
  146: *>  1)  OPTS is a concatenation of all of the character options to
  147: *>      subroutine NAME, in the same order that they appear in the
  148: *>      argument list for NAME, even if they are not used in determining
  149: *>      the value of the parameter specified by ISPEC.
  150: *>  2)  The problem dimensions N1, N2, N3, N4 are specified in the order
  151: *>      that they appear in the argument list for NAME.  N1 is used
  152: *>      first, N2 second, and so on, and unused problem dimensions are
  153: *>      passed a value of -1.
  154: *>  3)  The parameter value returned by ILAENV is checked for validity in
  155: *>      the calling subroutine.  For example, ILAENV is used to retrieve
  156: *>      the optimal blocksize for STRTRI as follows:
  157: *>
  158: *>      NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
  159: *>      IF( NB.LE.1 ) NB = MAX( 1, N )
  160: *> \endverbatim
  161: *>
  162: *  =====================================================================
  163:       INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  164: *
  165: *  -- LAPACK auxiliary routine (version 3.7.0) --
  166: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
  167: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  168: *     December 2016
  169: *
  170: *     .. Scalar Arguments ..
  171:       CHARACTER*( * )    NAME, OPTS
  172:       INTEGER            ISPEC, N1, N2, N3, N4
  173: *     ..
  174: *
  175: *  =====================================================================
  176: *
  177: *     .. Local Scalars ..
  178:       INTEGER            I, IC, IZ, NB, NBMIN, NX
  179:       LOGICAL            CNAME, SNAME
  180:       CHARACTER          C1*1, C2*2, C4*2, C3*3, SUBNAM*6
  181: *     ..
  182: *     .. Intrinsic Functions ..
  183:       INTRINSIC          CHAR, ICHAR, INT, MIN, REAL
  184: *     ..
  185: *     .. External Functions ..
  186:       INTEGER            IEEECK, IPARMQ, IPARAM2STAGE
  187:       EXTERNAL           IEEECK, IPARMQ, IPARAM2STAGE
  188: *     ..
  189: *     .. Executable Statements ..
  190: *
  191:       GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
  192:      $        130, 140, 150, 160, 160, 160, 160, 160,
  193:      $        170, 170, 170, 170, 170 )ISPEC
  194: *
  195: *     Invalid value for ISPEC
  196: *
  197:       ILAENV = -1
  198:       RETURN
  199: *
  200:    10 CONTINUE
  201: *
  202: *     Convert NAME to upper case if the first character is lower case.
  203: *
  204:       ILAENV = 1
  205:       SUBNAM = NAME
  206:       IC = ICHAR( SUBNAM( 1: 1 ) )
  207:       IZ = ICHAR( 'Z' )
  208:       IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
  209: *
  210: *        ASCII character set
  211: *
  212:          IF( IC.GE.97 .AND. IC.LE.122 ) THEN
  213:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
  214:             DO 20 I = 2, 6
  215:                IC = ICHAR( SUBNAM( I: I ) )
  216:                IF( IC.GE.97 .AND. IC.LE.122 )
  217:      $            SUBNAM( I: I ) = CHAR( IC-32 )
  218:    20       CONTINUE
  219:          END IF
  220: *
  221:       ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
  222: *
  223: *        EBCDIC character set
  224: *
  225:          IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  226:      $       ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  227:      $       ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
  228:             SUBNAM( 1: 1 ) = CHAR( IC+64 )
  229:             DO 30 I = 2, 6
  230:                IC = ICHAR( SUBNAM( I: I ) )
  231:                IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  232:      $             ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  233:      $             ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
  234:      $             I ) = CHAR( IC+64 )
  235:    30       CONTINUE
  236:          END IF
  237: *
  238:       ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
  239: *
  240: *        Prime machines:  ASCII+128
  241: *
  242:          IF( IC.GE.225 .AND. IC.LE.250 ) THEN
  243:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
  244:             DO 40 I = 2, 6
  245:                IC = ICHAR( SUBNAM( I: I ) )
  246:                IF( IC.GE.225 .AND. IC.LE.250 )
  247:      $            SUBNAM( I: I ) = CHAR( IC-32 )
  248:    40       CONTINUE
  249:          END IF
  250:       END IF
  251: *
  252:       C1 = SUBNAM( 1: 1 )
  253:       SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
  254:       CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
  255:       IF( .NOT.( CNAME .OR. SNAME ) )
  256:      $   RETURN
  257:       C2 = SUBNAM( 2: 3 )
  258:       C3 = SUBNAM( 4: 6 )
  259:       C4 = C3( 2: 3 )
  260: *
  261:       GO TO ( 50, 60, 70 )ISPEC
  262: *
  263:    50 CONTINUE
  264: *
  265: *     ISPEC = 1:  block size
  266: *
  267: *     In these examples, separate code is provided for setting NB for
  268: *     real and complex.  We assume that NB will take the same value in
  269: *     single or double precision.
  270: *
  271:       NB = 1
  272: *
  273:       IF( C2.EQ.'GE' ) THEN
  274:          IF( C3.EQ.'TRF' ) THEN
  275:             IF( SNAME ) THEN
  276:                NB = 64
  277:             ELSE
  278:                NB = 64
  279:             END IF
  280:          ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
  281:      $            C3.EQ.'QLF' ) THEN
  282:             IF( SNAME ) THEN
  283:                NB = 32
  284:             ELSE
  285:                NB = 32
  286:             END IF
  287:          ELSE IF( C3.EQ.'QR ') THEN
  288:             IF( N3 .EQ. 1) THEN
  289:                IF( SNAME ) THEN
  290: *     M*N
  291:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  292:                      NB = N1
  293:                   ELSE
  294:                      NB = 32768/N2
  295:                   END IF
  296:                ELSE
  297:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  298:                      NB = N1
  299:                   ELSE
  300:                      NB = 32768/N2
  301:                   END IF
  302:                END IF
  303:             ELSE
  304:                IF( SNAME ) THEN
  305:                   NB = 1
  306:                ELSE
  307:                   NB = 1
  308:                END IF
  309:             END IF
  310:          ELSE IF( C3.EQ.'LQ ') THEN
  311:             IF( N3 .EQ. 2) THEN
  312:                IF( SNAME ) THEN
  313: *     M*N
  314:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  315:                      NB = N1
  316:                   ELSE
  317:                      NB = 32768/N2
  318:                   END IF
  319:                ELSE
  320:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  321:                      NB = N1
  322:                   ELSE
  323:                      NB = 32768/N2
  324:                   END IF
  325:                END IF
  326:             ELSE
  327:                IF( SNAME ) THEN
  328:                   NB = 1
  329:                ELSE
  330:                   NB = 1
  331:                END IF
  332:             END IF
  333:          ELSE IF( C3.EQ.'HRD' ) THEN
  334:             IF( SNAME ) THEN
  335:                NB = 32
  336:             ELSE
  337:                NB = 32
  338:             END IF
  339:          ELSE IF( C3.EQ.'BRD' ) THEN
  340:             IF( SNAME ) THEN
  341:                NB = 32
  342:             ELSE
  343:                NB = 32
  344:             END IF
  345:          ELSE IF( C3.EQ.'TRI' ) THEN
  346:             IF( SNAME ) THEN
  347:                NB = 64
  348:             ELSE
  349:                NB = 64
  350:             END IF
  351:          END IF
  352:       ELSE IF( C2.EQ.'PO' ) THEN
  353:          IF( C3.EQ.'TRF' ) THEN
  354:             IF( SNAME ) THEN
  355:                NB = 64
  356:             ELSE
  357:                NB = 64
  358:             END IF
  359:          END IF
  360:       ELSE IF( C2.EQ.'SY' ) THEN
  361:          IF( C3.EQ.'TRF' ) THEN
  362:             IF( SNAME ) THEN
  363:                NB = 64
  364:             ELSE
  365:                NB = 64
  366:             END IF
  367:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  368:             NB = 32
  369:          ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
  370:             NB = 64
  371:          END IF
  372:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  373:          IF( C3.EQ.'TRF' ) THEN
  374:             NB = 64
  375:          ELSE IF( C3.EQ.'TRD' ) THEN
  376:             NB = 32
  377:          ELSE IF( C3.EQ.'GST' ) THEN
  378:             NB = 64
  379:          END IF
  380:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  381:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  382:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  383:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  384:      $           THEN
  385:                NB = 32
  386:             END IF
  387:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  388:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  389:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  390:      $           THEN
  391:                NB = 32
  392:             END IF
  393:          END IF
  394:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  395:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  396:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  397:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  398:      $           THEN
  399:                NB = 32
  400:             END IF
  401:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  402:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  403:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  404:      $           THEN
  405:                NB = 32
  406:             END IF
  407:          END IF
  408:       ELSE IF( C2.EQ.'GB' ) THEN
  409:          IF( C3.EQ.'TRF' ) THEN
  410:             IF( SNAME ) THEN
  411:                IF( N4.LE.64 ) THEN
  412:                   NB = 1
  413:                ELSE
  414:                   NB = 32
  415:                END IF
  416:             ELSE
  417:                IF( N4.LE.64 ) THEN
  418:                   NB = 1
  419:                ELSE
  420:                   NB = 32
  421:                END IF
  422:             END IF
  423:          END IF
  424:       ELSE IF( C2.EQ.'PB' ) THEN
  425:          IF( C3.EQ.'TRF' ) THEN
  426:             IF( SNAME ) THEN
  427:                IF( N2.LE.64 ) THEN
  428:                   NB = 1
  429:                ELSE
  430:                   NB = 32
  431:                END IF
  432:             ELSE
  433:                IF( N2.LE.64 ) THEN
  434:                   NB = 1
  435:                ELSE
  436:                   NB = 32
  437:                END IF
  438:             END IF
  439:          END IF
  440:       ELSE IF( C2.EQ.'TR' ) THEN
  441:          IF( C3.EQ.'TRI' ) THEN
  442:             IF( SNAME ) THEN
  443:                NB = 64
  444:             ELSE
  445:                NB = 64
  446:             END IF
  447:          ELSE IF ( C3.EQ.'EVC' ) THEN
  448:             IF( SNAME ) THEN
  449:                NB = 64
  450:             ELSE
  451:                NB = 64
  452:             END IF
  453:          END IF
  454:       ELSE IF( C2.EQ.'LA' ) THEN
  455:          IF( C3.EQ.'UUM' ) THEN
  456:             IF( SNAME ) THEN
  457:                NB = 64
  458:             ELSE
  459:                NB = 64
  460:             END IF
  461:          END IF
  462:       ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
  463:          IF( C3.EQ.'EBZ' ) THEN
  464:             NB = 1
  465:          END IF
  466:       ELSE IF( C2.EQ.'GG' ) THEN
  467:          NB = 32
  468:          IF( C3.EQ.'HD3' ) THEN
  469:             IF( SNAME ) THEN
  470:                NB = 32
  471:             ELSE
  472:                NB = 32
  473:             END IF
  474:          END IF
  475:       END IF
  476:       ILAENV = NB
  477:       RETURN
  478: *
  479:    60 CONTINUE
  480: *
  481: *     ISPEC = 2:  minimum block size
  482: *
  483:       NBMIN = 2
  484:       IF( C2.EQ.'GE' ) THEN
  485:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  486:      $       'QLF' ) THEN
  487:             IF( SNAME ) THEN
  488:                NBMIN = 2
  489:             ELSE
  490:                NBMIN = 2
  491:             END IF
  492:          ELSE IF( C3.EQ.'HRD' ) THEN
  493:             IF( SNAME ) THEN
  494:                NBMIN = 2
  495:             ELSE
  496:                NBMIN = 2
  497:             END IF
  498:          ELSE IF( C3.EQ.'BRD' ) THEN
  499:             IF( SNAME ) THEN
  500:                NBMIN = 2
  501:             ELSE
  502:                NBMIN = 2
  503:             END IF
  504:          ELSE IF( C3.EQ.'TRI' ) THEN
  505:             IF( SNAME ) THEN
  506:                NBMIN = 2
  507:             ELSE
  508:                NBMIN = 2
  509:             END IF
  510:          END IF
  511:       ELSE IF( C2.EQ.'SY' ) THEN
  512:          IF( C3.EQ.'TRF' ) THEN
  513:             IF( SNAME ) THEN
  514:                NBMIN = 8
  515:             ELSE
  516:                NBMIN = 8
  517:             END IF
  518:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  519:             NBMIN = 2
  520:          END IF
  521:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  522:          IF( C3.EQ.'TRD' ) THEN
  523:             NBMIN = 2
  524:          END IF
  525:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  526:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  527:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  528:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  529:      $           THEN
  530:                NBMIN = 2
  531:             END IF
  532:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  533:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  534:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  535:      $           THEN
  536:                NBMIN = 2
  537:             END IF
  538:          END IF
  539:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  540:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  541:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  542:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  543:      $           THEN
  544:                NBMIN = 2
  545:             END IF
  546:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  547:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  548:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  549:      $           THEN
  550:                NBMIN = 2
  551:             END IF
  552:          END IF
  553:       ELSE IF( C2.EQ.'GG' ) THEN
  554:          NBMIN = 2
  555:          IF( C3.EQ.'HD3' ) THEN
  556:             NBMIN = 2
  557:          END IF
  558:       END IF
  559:       ILAENV = NBMIN
  560:       RETURN
  561: *
  562:    70 CONTINUE
  563: *
  564: *     ISPEC = 3:  crossover point
  565: *
  566:       NX = 0
  567:       IF( C2.EQ.'GE' ) THEN
  568:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  569:      $       'QLF' ) THEN
  570:             IF( SNAME ) THEN
  571:                NX = 128
  572:             ELSE
  573:                NX = 128
  574:             END IF
  575:          ELSE IF( C3.EQ.'HRD' ) THEN
  576:             IF( SNAME ) THEN
  577:                NX = 128
  578:             ELSE
  579:                NX = 128
  580:             END IF
  581:          ELSE IF( C3.EQ.'BRD' ) THEN
  582:             IF( SNAME ) THEN
  583:                NX = 128
  584:             ELSE
  585:                NX = 128
  586:             END IF
  587:          END IF
  588:       ELSE IF( C2.EQ.'SY' ) THEN
  589:          IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  590:             NX = 32
  591:          END IF
  592:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  593:          IF( C3.EQ.'TRD' ) THEN
  594:             NX = 32
  595:          END IF
  596:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  597:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  598:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  599:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  600:      $           THEN
  601:                NX = 128
  602:             END IF
  603:          END IF
  604:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  605:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  606:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  607:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  608:      $           THEN
  609:                NX = 128
  610:             END IF
  611:          END IF
  612:       ELSE IF( C2.EQ.'GG' ) THEN
  613:          NX = 128
  614:          IF( C3.EQ.'HD3' ) THEN
  615:             NX = 128
  616:          END IF
  617:       END IF
  618:       ILAENV = NX
  619:       RETURN
  620: *
  621:    80 CONTINUE
  622: *
  623: *     ISPEC = 4:  number of shifts (used by xHSEQR)
  624: *
  625:       ILAENV = 6
  626:       RETURN
  627: *
  628:    90 CONTINUE
  629: *
  630: *     ISPEC = 5:  minimum column dimension (not used)
  631: *
  632:       ILAENV = 2
  633:       RETURN
  634: *
  635:   100 CONTINUE
  636: *
  637: *     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
  638: *
  639:       ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  640:       RETURN
  641: *
  642:   110 CONTINUE
  643: *
  644: *     ISPEC = 7:  number of processors (not used)
  645: *
  646:       ILAENV = 1
  647:       RETURN
  648: *
  649:   120 CONTINUE
  650: *
  651: *     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
  652: *
  653:       ILAENV = 50
  654:       RETURN
  655: *
  656:   130 CONTINUE
  657: *
  658: *     ISPEC = 9:  maximum size of the subproblems at the bottom of the
  659: *                 computation tree in the divide-and-conquer algorithm
  660: *                 (used by xGELSD and xGESDD)
  661: *
  662:       ILAENV = 25
  663:       RETURN
  664: *
  665:   140 CONTINUE
  666: *
  667: *     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
  668: *
  669: *     ILAENV = 0
  670:       ILAENV = 1
  671:       IF( ILAENV.EQ.1 ) THEN
  672:          ILAENV = IEEECK( 1, 0.0, 1.0 )
  673:       END IF
  674:       RETURN
  675: *
  676:   150 CONTINUE
  677: *
  678: *     ISPEC = 11: infinity arithmetic can be trusted not to trap
  679: *
  680: *     ILAENV = 0
  681:       ILAENV = 1
  682:       IF( ILAENV.EQ.1 ) THEN
  683:          ILAENV = IEEECK( 0, 0.0, 1.0 )
  684:       END IF
  685:       RETURN
  686: *
  687:   160 CONTINUE
  688: *
  689: *     12 <= ISPEC <= 16: xHSEQR or related subroutines.
  690: *
  691:       ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  692:       RETURN
  693: *
  694:   170 CONTINUE
  695: *
  696: *     17 <= ISPEC <= 21: 2stage eigenvalues and SVD or related subroutines.
  697: *
  698:       ILAENV = IPARAM2STAGE( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  699:       RETURN
  700: *
  701: *     End of ILAENV
  702: *
  703:       END

CVSweb interface <joel.bertrand@systella.fr>