File:  [local] / rpl / lapack / lapack / ilaenv.f
Revision 1.20: download - view: text, annotated - select for diffs - revision graph
Mon Aug 7 08:39:14 2023 UTC (8 months, 3 weeks ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_35, rpl-4_1_34, HEAD
Première mise à jour de lapack et blas.

    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 infinity and NaN arithmetic can be trusted not to trap
   83: *>          =11: infinity arithmetic can be trusted not to trap
   84: *>          12 <= ISPEC <= 17:
   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: *> \ingroup OTHERauxiliary
  136: *
  137: *> \par Further Details:
  138: *  =====================
  139: *>
  140: *> \verbatim
  141: *>
  142: *>  The following conventions have been used when calling ILAENV from the
  143: *>  LAPACK routines:
  144: *>  1)  OPTS is a concatenation of all of the character options to
  145: *>      subroutine NAME, in the same order that they appear in the
  146: *>      argument list for NAME, even if they are not used in determining
  147: *>      the value of the parameter specified by ISPEC.
  148: *>  2)  The problem dimensions N1, N2, N3, N4 are specified in the order
  149: *>      that they appear in the argument list for NAME.  N1 is used
  150: *>      first, N2 second, and so on, and unused problem dimensions are
  151: *>      passed a value of -1.
  152: *>  3)  The parameter value returned by ILAENV is checked for validity in
  153: *>      the calling subroutine.  For example, ILAENV is used to retrieve
  154: *>      the optimal blocksize for STRTRI as follows:
  155: *>
  156: *>      NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
  157: *>      IF( NB.LE.1 ) NB = MAX( 1, N )
  158: *> \endverbatim
  159: *>
  160: *  =====================================================================
  161:       INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  162: *
  163: *  -- LAPACK auxiliary routine --
  164: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
  165: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  166: *
  167: *     .. Scalar Arguments ..
  168:       CHARACTER*( * )    NAME, OPTS
  169:       INTEGER            ISPEC, N1, N2, N3, N4
  170: *     ..
  171: *
  172: *  =====================================================================
  173: *
  174: *     .. Local Scalars ..
  175:       INTEGER            I, IC, IZ, NB, NBMIN, NX
  176:       LOGICAL            CNAME, SNAME, TWOSTAGE
  177:       CHARACTER          C1*1, C2*2, C4*2, C3*3, SUBNAM*16
  178: *     ..
  179: *     .. Intrinsic Functions ..
  180:       INTRINSIC          CHAR, ICHAR, INT, MIN, REAL
  181: *     ..
  182: *     .. External Functions ..
  183:       INTEGER            IEEECK, IPARMQ, IPARAM2STAGE
  184:       EXTERNAL           IEEECK, IPARMQ, IPARAM2STAGE
  185: *     ..
  186: *     .. Executable Statements ..
  187: *
  188:       GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
  189:      $        130, 140, 150, 160, 160, 160, 160, 160, 160)ISPEC
  190: *
  191: *     Invalid value for ISPEC
  192: *
  193:       ILAENV = -1
  194:       RETURN
  195: *
  196:    10 CONTINUE
  197: *
  198: *     Convert NAME to upper case if the first character is lower case.
  199: *
  200:       ILAENV = 1
  201:       SUBNAM = NAME
  202:       IC = ICHAR( SUBNAM( 1: 1 ) )
  203:       IZ = ICHAR( 'Z' )
  204:       IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
  205: *
  206: *        ASCII character set
  207: *
  208:          IF( IC.GE.97 .AND. IC.LE.122 ) THEN
  209:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
  210:             DO 20 I = 2, 6
  211:                IC = ICHAR( SUBNAM( I: I ) )
  212:                IF( IC.GE.97 .AND. IC.LE.122 )
  213:      $            SUBNAM( I: I ) = CHAR( IC-32 )
  214:    20       CONTINUE
  215:          END IF
  216: *
  217:       ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
  218: *
  219: *        EBCDIC character set
  220: *
  221:          IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  222:      $       ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  223:      $       ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
  224:             SUBNAM( 1: 1 ) = CHAR( IC+64 )
  225:             DO 30 I = 2, 6
  226:                IC = ICHAR( SUBNAM( I: I ) )
  227:                IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  228:      $             ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  229:      $             ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
  230:      $             I ) = CHAR( IC+64 )
  231:    30       CONTINUE
  232:          END IF
  233: *
  234:       ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
  235: *
  236: *        Prime machines:  ASCII+128
  237: *
  238:          IF( IC.GE.225 .AND. IC.LE.250 ) THEN
  239:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
  240:             DO 40 I = 2, 6
  241:                IC = ICHAR( SUBNAM( I: I ) )
  242:                IF( IC.GE.225 .AND. IC.LE.250 )
  243:      $            SUBNAM( I: I ) = CHAR( IC-32 )
  244:    40       CONTINUE
  245:          END IF
  246:       END IF
  247: *
  248:       C1 = SUBNAM( 1: 1 )
  249:       SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
  250:       CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
  251:       IF( .NOT.( CNAME .OR. SNAME ) )
  252:      $   RETURN
  253:       C2 = SUBNAM( 2: 3 )
  254:       C3 = SUBNAM( 4: 6 )
  255:       C4 = C3( 2: 3 )
  256:       TWOSTAGE = LEN( SUBNAM ).GE.11
  257:      $           .AND. SUBNAM( 11: 11 ).EQ.'2'
  258: *
  259:       GO TO ( 50, 60, 70 )ISPEC
  260: *
  261:    50 CONTINUE
  262: *
  263: *     ISPEC = 1:  block size
  264: *
  265: *     In these examples, separate code is provided for setting NB for
  266: *     real and complex.  We assume that NB will take the same value in
  267: *     single or double precision.
  268: *
  269:       NB = 1
  270: *
  271:       IF( SUBNAM(2:6).EQ.'LAORH' ) THEN
  272: *
  273: *        This is for *LAORHR_GETRFNP routine
  274: *
  275:          IF( SNAME ) THEN
  276:              NB = 32
  277:          ELSE
  278:              NB = 32
  279:          END IF
  280:       ELSE IF( C2.EQ.'GE' ) THEN
  281:          IF( C3.EQ.'TRF' ) THEN
  282:             IF( SNAME ) THEN
  283:                NB = 64
  284:             ELSE
  285:                NB = 64
  286:             END IF
  287:          ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
  288:      $            C3.EQ.'QLF' ) THEN
  289:             IF( SNAME ) THEN
  290:                NB = 32
  291:             ELSE
  292:                NB = 32
  293:             END IF
  294:          ELSE IF( C3.EQ.'QR ') THEN
  295:             IF( N3 .EQ. 1) THEN
  296:                IF( SNAME ) THEN
  297: *     M*N
  298:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  299:                      NB = N1
  300:                   ELSE
  301:                      NB = 32768/N2
  302:                   END IF
  303:                ELSE
  304:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  305:                      NB = N1
  306:                   ELSE
  307:                      NB = 32768/N2
  308:                   END IF
  309:                END IF
  310:             ELSE
  311:                IF( SNAME ) THEN
  312:                   NB = 1
  313:                ELSE
  314:                   NB = 1
  315:                END IF
  316:             END IF
  317:          ELSE IF( C3.EQ.'LQ ') THEN
  318:             IF( N3 .EQ. 2) THEN
  319:                IF( SNAME ) THEN
  320: *     M*N
  321:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  322:                      NB = N1
  323:                   ELSE
  324:                      NB = 32768/N2
  325:                   END IF
  326:                ELSE
  327:                   IF ((N1*N2.LE.131072).OR.(N1.LE.8192)) THEN
  328:                      NB = N1
  329:                   ELSE
  330:                      NB = 32768/N2
  331:                   END IF
  332:                END IF
  333:             ELSE
  334:                IF( SNAME ) THEN
  335:                   NB = 1
  336:                ELSE
  337:                   NB = 1
  338:                END IF
  339:             END IF
  340:          ELSE IF( C3.EQ.'HRD' ) THEN
  341:             IF( SNAME ) THEN
  342:                NB = 32
  343:             ELSE
  344:                NB = 32
  345:             END IF
  346:          ELSE IF( C3.EQ.'BRD' ) THEN
  347:             IF( SNAME ) THEN
  348:                NB = 32
  349:             ELSE
  350:                NB = 32
  351:             END IF
  352:          ELSE IF( C3.EQ.'TRI' ) THEN
  353:             IF( SNAME ) THEN
  354:                NB = 64
  355:             ELSE
  356:                NB = 64
  357:             END IF
  358:          END IF
  359:       ELSE IF( C2.EQ.'PO' ) THEN
  360:          IF( C3.EQ.'TRF' ) THEN
  361:             IF( SNAME ) THEN
  362:                NB = 64
  363:             ELSE
  364:                NB = 64
  365:             END IF
  366:          END IF
  367:       ELSE IF( C2.EQ.'SY' ) THEN
  368:          IF( C3.EQ.'TRF' ) THEN
  369:             IF( SNAME ) THEN
  370:                IF( TWOSTAGE ) THEN
  371:                   NB = 192
  372:                ELSE
  373:                   NB = 64
  374:                END IF
  375:             ELSE
  376:                IF( TWOSTAGE ) THEN
  377:                   NB = 192
  378:                ELSE
  379:                   NB = 64
  380:                END IF
  381:             END IF
  382:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  383:             NB = 32
  384:          ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
  385:             NB = 64
  386:          END IF
  387:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  388:          IF( C3.EQ.'TRF' ) THEN
  389:             IF( TWOSTAGE ) THEN
  390:                NB = 192
  391:             ELSE
  392:                NB = 64
  393:             END IF
  394:          ELSE IF( C3.EQ.'TRD' ) THEN
  395:             NB = 32
  396:          ELSE IF( C3.EQ.'GST' ) THEN
  397:             NB = 64
  398:          END IF
  399:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  400:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  401:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  402:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  403:      $           THEN
  404:                NB = 32
  405:             END IF
  406:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  407:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  408:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  409:      $           THEN
  410:                NB = 32
  411:             END IF
  412:          END IF
  413:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  414:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  415:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  416:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  417:      $           THEN
  418:                NB = 32
  419:             END IF
  420:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  421:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  422:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  423:      $           THEN
  424:                NB = 32
  425:             END IF
  426:          END IF
  427:       ELSE IF( C2.EQ.'GB' ) THEN
  428:          IF( C3.EQ.'TRF' ) THEN
  429:             IF( SNAME ) THEN
  430:                IF( N4.LE.64 ) THEN
  431:                   NB = 1
  432:                ELSE
  433:                   NB = 32
  434:                END IF
  435:             ELSE
  436:                IF( N4.LE.64 ) THEN
  437:                   NB = 1
  438:                ELSE
  439:                   NB = 32
  440:                END IF
  441:             END IF
  442:          END IF
  443:       ELSE IF( C2.EQ.'PB' ) THEN
  444:          IF( C3.EQ.'TRF' ) THEN
  445:             IF( SNAME ) THEN
  446:                IF( N2.LE.64 ) THEN
  447:                   NB = 1
  448:                ELSE
  449:                   NB = 32
  450:                END IF
  451:             ELSE
  452:                IF( N2.LE.64 ) THEN
  453:                   NB = 1
  454:                ELSE
  455:                   NB = 32
  456:                END IF
  457:             END IF
  458:          END IF
  459:       ELSE IF( C2.EQ.'TR' ) THEN
  460:          IF( C3.EQ.'TRI' ) THEN
  461:             IF( SNAME ) THEN
  462:                NB = 64
  463:             ELSE
  464:                NB = 64
  465:             END IF
  466:          ELSE IF ( C3.EQ.'EVC' ) THEN
  467:             IF( SNAME ) THEN
  468:                NB = 64
  469:             ELSE
  470:                NB = 64
  471:             END IF
  472:          ELSE IF( C3.EQ.'SYL' ) THEN
  473: *           The upper bound is to prevent overly aggressive scaling.
  474:             IF( SNAME ) THEN
  475:                NB = MIN( MAX( 48, INT( ( MIN( N1, N2 ) * 16 ) / 100) ),
  476:      $                   240 )
  477:             ELSE
  478:                NB = MIN( MAX( 24, INT( ( MIN( N1, N2 ) * 8 ) / 100) ),
  479:      $                   80 )
  480:             END IF
  481:          END IF
  482:       ELSE IF( C2.EQ.'LA' ) THEN
  483:          IF( C3.EQ.'UUM' ) THEN
  484:             IF( SNAME ) THEN
  485:                NB = 64
  486:             ELSE
  487:                NB = 64
  488:             END IF
  489:          ELSE IF( C3.EQ.'TRS' ) THEN
  490:             IF( SNAME ) THEN
  491:                NB = 32
  492:             ELSE
  493:                NB = 32
  494:             END IF
  495:          END IF
  496:       ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
  497:          IF( C3.EQ.'EBZ' ) THEN
  498:             NB = 1
  499:          END IF
  500:       ELSE IF( C2.EQ.'GG' ) THEN
  501:          NB = 32
  502:          IF( C3.EQ.'HD3' ) THEN
  503:             IF( SNAME ) THEN
  504:                NB = 32
  505:             ELSE
  506:                NB = 32
  507:             END IF
  508:          END IF
  509:       END IF
  510:       ILAENV = NB
  511:       RETURN
  512: *
  513:    60 CONTINUE
  514: *
  515: *     ISPEC = 2:  minimum block size
  516: *
  517:       NBMIN = 2
  518:       IF( C2.EQ.'GE' ) THEN
  519:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  520:      $       'QLF' ) THEN
  521:             IF( SNAME ) THEN
  522:                NBMIN = 2
  523:             ELSE
  524:                NBMIN = 2
  525:             END IF
  526:          ELSE IF( C3.EQ.'HRD' ) THEN
  527:             IF( SNAME ) THEN
  528:                NBMIN = 2
  529:             ELSE
  530:                NBMIN = 2
  531:             END IF
  532:          ELSE IF( C3.EQ.'BRD' ) THEN
  533:             IF( SNAME ) THEN
  534:                NBMIN = 2
  535:             ELSE
  536:                NBMIN = 2
  537:             END IF
  538:          ELSE IF( C3.EQ.'TRI' ) THEN
  539:             IF( SNAME ) THEN
  540:                NBMIN = 2
  541:             ELSE
  542:                NBMIN = 2
  543:             END IF
  544:          END IF
  545:       ELSE IF( C2.EQ.'SY' ) THEN
  546:          IF( C3.EQ.'TRF' ) THEN
  547:             IF( SNAME ) THEN
  548:                NBMIN = 8
  549:             ELSE
  550:                NBMIN = 8
  551:             END IF
  552:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  553:             NBMIN = 2
  554:          END IF
  555:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  556:          IF( C3.EQ.'TRD' ) THEN
  557:             NBMIN = 2
  558:          END IF
  559:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  560:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  561:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  562:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  563:      $           THEN
  564:                NBMIN = 2
  565:             END IF
  566:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  567:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  568:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  569:      $           THEN
  570:                NBMIN = 2
  571:             END IF
  572:          END IF
  573:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  574:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  575:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  576:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  577:      $           THEN
  578:                NBMIN = 2
  579:             END IF
  580:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  581:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  582:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  583:      $           THEN
  584:                NBMIN = 2
  585:             END IF
  586:          END IF
  587:       ELSE IF( C2.EQ.'GG' ) THEN
  588:          NBMIN = 2
  589:          IF( C3.EQ.'HD3' ) THEN
  590:             NBMIN = 2
  591:          END IF
  592:       END IF
  593:       ILAENV = NBMIN
  594:       RETURN
  595: *
  596:    70 CONTINUE
  597: *
  598: *     ISPEC = 3:  crossover point
  599: *
  600:       NX = 0
  601:       IF( C2.EQ.'GE' ) THEN
  602:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  603:      $       'QLF' ) THEN
  604:             IF( SNAME ) THEN
  605:                NX = 128
  606:             ELSE
  607:                NX = 128
  608:             END IF
  609:          ELSE IF( C3.EQ.'HRD' ) THEN
  610:             IF( SNAME ) THEN
  611:                NX = 128
  612:             ELSE
  613:                NX = 128
  614:             END IF
  615:          ELSE IF( C3.EQ.'BRD' ) THEN
  616:             IF( SNAME ) THEN
  617:                NX = 128
  618:             ELSE
  619:                NX = 128
  620:             END IF
  621:          END IF
  622:       ELSE IF( C2.EQ.'SY' ) THEN
  623:          IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  624:             NX = 32
  625:          END IF
  626:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  627:          IF( C3.EQ.'TRD' ) THEN
  628:             NX = 32
  629:          END IF
  630:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  631:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  632:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  633:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  634:      $           THEN
  635:                NX = 128
  636:             END IF
  637:          END IF
  638:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  639:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  640:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  641:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  642:      $           THEN
  643:                NX = 128
  644:             END IF
  645:          END IF
  646:       ELSE IF( C2.EQ.'GG' ) THEN
  647:          NX = 128
  648:          IF( C3.EQ.'HD3' ) THEN
  649:             NX = 128
  650:          END IF
  651:       END IF
  652:       ILAENV = NX
  653:       RETURN
  654: *
  655:    80 CONTINUE
  656: *
  657: *     ISPEC = 4:  number of shifts (used by xHSEQR)
  658: *
  659:       ILAENV = 6
  660:       RETURN
  661: *
  662:    90 CONTINUE
  663: *
  664: *     ISPEC = 5:  minimum column dimension (not used)
  665: *
  666:       ILAENV = 2
  667:       RETURN
  668: *
  669:   100 CONTINUE
  670: *
  671: *     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
  672: *
  673:       ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  674:       RETURN
  675: *
  676:   110 CONTINUE
  677: *
  678: *     ISPEC = 7:  number of processors (not used)
  679: *
  680:       ILAENV = 1
  681:       RETURN
  682: *
  683:   120 CONTINUE
  684: *
  685: *     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
  686: *
  687:       ILAENV = 50
  688:       RETURN
  689: *
  690:   130 CONTINUE
  691: *
  692: *     ISPEC = 9:  maximum size of the subproblems at the bottom of the
  693: *                 computation tree in the divide-and-conquer algorithm
  694: *                 (used by xGELSD and xGESDD)
  695: *
  696:       ILAENV = 25
  697:       RETURN
  698: *
  699:   140 CONTINUE
  700: *
  701: *     ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap
  702: *
  703: *     ILAENV = 0
  704:       ILAENV = 1
  705:       IF( ILAENV.EQ.1 ) THEN
  706:          ILAENV = IEEECK( 1, 0.0, 1.0 )
  707:       END IF
  708:       RETURN
  709: *
  710:   150 CONTINUE
  711: *
  712: *     ISPEC = 11: ieee infinity arithmetic can be trusted not to trap
  713: *
  714: *     ILAENV = 0
  715:       ILAENV = 1
  716:       IF( ILAENV.EQ.1 ) THEN
  717:          ILAENV = IEEECK( 0, 0.0, 1.0 )
  718:       END IF
  719:       RETURN
  720: *
  721:   160 CONTINUE
  722: *
  723: *     12 <= ISPEC <= 17: xHSEQR or related subroutines.
  724: *
  725:       ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  726:       RETURN
  727: *
  728: *     End of ILAENV
  729: *
  730:       END

CVSweb interface <joel.bertrand@systella.fr>