File:  [local] / rpl / lapack / lapack / ilaenv.f
Revision 1.13: download - view: text, annotated - select for diffs - revision graph
Mon Jan 27 09:28:30 2014 UTC (10 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_23, rpl-4_1_22, rpl-4_1_21, rpl-4_1_20, rpl-4_1_19, rpl-4_1_18, rpl-4_1_17, HEAD
Cohérence.

    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 one of its 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 November 2011
  136: *
  137: *> \ingroup auxOTHERauxiliary
  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.4.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: *     November 2011
  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
  187:       EXTERNAL           IEEECK, IPARMQ
  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 )ISPEC
  193: *
  194: *     Invalid value for ISPEC
  195: *
  196:       ILAENV = -1
  197:       RETURN
  198: *
  199:    10 CONTINUE
  200: *
  201: *     Convert NAME to upper case if the first character is lower case.
  202: *
  203:       ILAENV = 1
  204:       SUBNAM = NAME
  205:       IC = ICHAR( SUBNAM( 1: 1 ) )
  206:       IZ = ICHAR( 'Z' )
  207:       IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
  208: *
  209: *        ASCII character set
  210: *
  211:          IF( IC.GE.97 .AND. IC.LE.122 ) THEN
  212:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
  213:             DO 20 I = 2, 6
  214:                IC = ICHAR( SUBNAM( I: I ) )
  215:                IF( IC.GE.97 .AND. IC.LE.122 )
  216:      $            SUBNAM( I: I ) = CHAR( IC-32 )
  217:    20       CONTINUE
  218:          END IF
  219: *
  220:       ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
  221: *
  222: *        EBCDIC character set
  223: *
  224:          IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  225:      $       ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  226:      $       ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
  227:             SUBNAM( 1: 1 ) = CHAR( IC+64 )
  228:             DO 30 I = 2, 6
  229:                IC = ICHAR( SUBNAM( I: I ) )
  230:                IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
  231:      $             ( IC.GE.145 .AND. IC.LE.153 ) .OR.
  232:      $             ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
  233:      $             I ) = CHAR( IC+64 )
  234:    30       CONTINUE
  235:          END IF
  236: *
  237:       ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
  238: *
  239: *        Prime machines:  ASCII+128
  240: *
  241:          IF( IC.GE.225 .AND. IC.LE.250 ) THEN
  242:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
  243:             DO 40 I = 2, 6
  244:                IC = ICHAR( SUBNAM( I: I ) )
  245:                IF( IC.GE.225 .AND. IC.LE.250 )
  246:      $            SUBNAM( I: I ) = CHAR( IC-32 )
  247:    40       CONTINUE
  248:          END IF
  249:       END IF
  250: *
  251:       C1 = SUBNAM( 1: 1 )
  252:       SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
  253:       CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
  254:       IF( .NOT.( CNAME .OR. SNAME ) )
  255:      $   RETURN
  256:       C2 = SUBNAM( 2: 3 )
  257:       C3 = SUBNAM( 4: 6 )
  258:       C4 = C3( 2: 3 )
  259: *
  260:       GO TO ( 50, 60, 70 )ISPEC
  261: *
  262:    50 CONTINUE
  263: *
  264: *     ISPEC = 1:  block size
  265: *
  266: *     In these examples, separate code is provided for setting NB for
  267: *     real and complex.  We assume that NB will take the same value in
  268: *     single or double precision.
  269: *
  270:       NB = 1
  271: *
  272:       IF( C2.EQ.'GE' ) THEN
  273:          IF( C3.EQ.'TRF' ) THEN
  274:             IF( SNAME ) THEN
  275:                NB = 64
  276:             ELSE
  277:                NB = 64
  278:             END IF
  279:          ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
  280:      $            C3.EQ.'QLF' ) THEN
  281:             IF( SNAME ) THEN
  282:                NB = 32
  283:             ELSE
  284:                NB = 32
  285:             END IF
  286:          ELSE IF( C3.EQ.'HRD' ) THEN
  287:             IF( SNAME ) THEN
  288:                NB = 32
  289:             ELSE
  290:                NB = 32
  291:             END IF
  292:          ELSE IF( C3.EQ.'BRD' ) THEN
  293:             IF( SNAME ) THEN
  294:                NB = 32
  295:             ELSE
  296:                NB = 32
  297:             END IF
  298:          ELSE IF( C3.EQ.'TRI' ) THEN
  299:             IF( SNAME ) THEN
  300:                NB = 64
  301:             ELSE
  302:                NB = 64
  303:             END IF
  304:          END IF
  305:       ELSE IF( C2.EQ.'PO' ) THEN
  306:          IF( C3.EQ.'TRF' ) THEN
  307:             IF( SNAME ) THEN
  308:                NB = 64
  309:             ELSE
  310:                NB = 64
  311:             END IF
  312:          END IF
  313:       ELSE IF( C2.EQ.'SY' ) THEN
  314:          IF( C3.EQ.'TRF' ) THEN
  315:             IF( SNAME ) THEN
  316:                NB = 64
  317:             ELSE
  318:                NB = 64
  319:             END IF
  320:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  321:             NB = 32
  322:          ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
  323:             NB = 64
  324:          END IF
  325:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  326:          IF( C3.EQ.'TRF' ) THEN
  327:             NB = 64
  328:          ELSE IF( C3.EQ.'TRD' ) THEN
  329:             NB = 32
  330:          ELSE IF( C3.EQ.'GST' ) THEN
  331:             NB = 64
  332:          END IF
  333:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  334:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  335:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  336:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  337:      $           THEN
  338:                NB = 32
  339:             END IF
  340:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  341:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  342:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  343:      $           THEN
  344:                NB = 32
  345:             END IF
  346:          END IF
  347:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  348:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  349:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  350:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  351:      $           THEN
  352:                NB = 32
  353:             END IF
  354:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  355:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  356:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  357:      $           THEN
  358:                NB = 32
  359:             END IF
  360:          END IF
  361:       ELSE IF( C2.EQ.'GB' ) THEN
  362:          IF( C3.EQ.'TRF' ) THEN
  363:             IF( SNAME ) THEN
  364:                IF( N4.LE.64 ) THEN
  365:                   NB = 1
  366:                ELSE
  367:                   NB = 32
  368:                END IF
  369:             ELSE
  370:                IF( N4.LE.64 ) THEN
  371:                   NB = 1
  372:                ELSE
  373:                   NB = 32
  374:                END IF
  375:             END IF
  376:          END IF
  377:       ELSE IF( C2.EQ.'PB' ) THEN
  378:          IF( C3.EQ.'TRF' ) THEN
  379:             IF( SNAME ) THEN
  380:                IF( N2.LE.64 ) THEN
  381:                   NB = 1
  382:                ELSE
  383:                   NB = 32
  384:                END IF
  385:             ELSE
  386:                IF( N2.LE.64 ) THEN
  387:                   NB = 1
  388:                ELSE
  389:                   NB = 32
  390:                END IF
  391:             END IF
  392:          END IF
  393:       ELSE IF( C2.EQ.'TR' ) THEN
  394:          IF( C3.EQ.'TRI' ) THEN
  395:             IF( SNAME ) THEN
  396:                NB = 64
  397:             ELSE
  398:                NB = 64
  399:             END IF
  400:          END IF
  401:       ELSE IF( C2.EQ.'LA' ) THEN
  402:          IF( C3.EQ.'UUM' ) THEN
  403:             IF( SNAME ) THEN
  404:                NB = 64
  405:             ELSE
  406:                NB = 64
  407:             END IF
  408:          END IF
  409:       ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
  410:          IF( C3.EQ.'EBZ' ) THEN
  411:             NB = 1
  412:          END IF
  413:       END IF
  414:       ILAENV = NB
  415:       RETURN
  416: *
  417:    60 CONTINUE
  418: *
  419: *     ISPEC = 2:  minimum block size
  420: *
  421:       NBMIN = 2
  422:       IF( C2.EQ.'GE' ) THEN
  423:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  424:      $       'QLF' ) THEN
  425:             IF( SNAME ) THEN
  426:                NBMIN = 2
  427:             ELSE
  428:                NBMIN = 2
  429:             END IF
  430:          ELSE IF( C3.EQ.'HRD' ) THEN
  431:             IF( SNAME ) THEN
  432:                NBMIN = 2
  433:             ELSE
  434:                NBMIN = 2
  435:             END IF
  436:          ELSE IF( C3.EQ.'BRD' ) THEN
  437:             IF( SNAME ) THEN
  438:                NBMIN = 2
  439:             ELSE
  440:                NBMIN = 2
  441:             END IF
  442:          ELSE IF( C3.EQ.'TRI' ) THEN
  443:             IF( SNAME ) THEN
  444:                NBMIN = 2
  445:             ELSE
  446:                NBMIN = 2
  447:             END IF
  448:          END IF
  449:       ELSE IF( C2.EQ.'SY' ) THEN
  450:          IF( C3.EQ.'TRF' ) THEN
  451:             IF( SNAME ) THEN
  452:                NBMIN = 8
  453:             ELSE
  454:                NBMIN = 8
  455:             END IF
  456:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  457:             NBMIN = 2
  458:          END IF
  459:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  460:          IF( C3.EQ.'TRD' ) THEN
  461:             NBMIN = 2
  462:          END IF
  463:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  464:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  465:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  466:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  467:      $           THEN
  468:                NBMIN = 2
  469:             END IF
  470:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  471:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  472:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  473:      $           THEN
  474:                NBMIN = 2
  475:             END IF
  476:          END IF
  477:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  478:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  479:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  480:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  481:      $           THEN
  482:                NBMIN = 2
  483:             END IF
  484:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  485:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  486:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  487:      $           THEN
  488:                NBMIN = 2
  489:             END IF
  490:          END IF
  491:       END IF
  492:       ILAENV = NBMIN
  493:       RETURN
  494: *
  495:    70 CONTINUE
  496: *
  497: *     ISPEC = 3:  crossover point
  498: *
  499:       NX = 0
  500:       IF( C2.EQ.'GE' ) THEN
  501:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  502:      $       'QLF' ) THEN
  503:             IF( SNAME ) THEN
  504:                NX = 128
  505:             ELSE
  506:                NX = 128
  507:             END IF
  508:          ELSE IF( C3.EQ.'HRD' ) THEN
  509:             IF( SNAME ) THEN
  510:                NX = 128
  511:             ELSE
  512:                NX = 128
  513:             END IF
  514:          ELSE IF( C3.EQ.'BRD' ) THEN
  515:             IF( SNAME ) THEN
  516:                NX = 128
  517:             ELSE
  518:                NX = 128
  519:             END IF
  520:          END IF
  521:       ELSE IF( C2.EQ.'SY' ) THEN
  522:          IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  523:             NX = 32
  524:          END IF
  525:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  526:          IF( C3.EQ.'TRD' ) THEN
  527:             NX = 32
  528:          END IF
  529:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  530:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  531:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  532:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  533:      $           THEN
  534:                NX = 128
  535:             END IF
  536:          END IF
  537:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  538:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  539:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  540:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  541:      $           THEN
  542:                NX = 128
  543:             END IF
  544:          END IF
  545:       END IF
  546:       ILAENV = NX
  547:       RETURN
  548: *
  549:    80 CONTINUE
  550: *
  551: *     ISPEC = 4:  number of shifts (used by xHSEQR)
  552: *
  553:       ILAENV = 6
  554:       RETURN
  555: *
  556:    90 CONTINUE
  557: *
  558: *     ISPEC = 5:  minimum column dimension (not used)
  559: *
  560:       ILAENV = 2
  561:       RETURN
  562: *
  563:   100 CONTINUE
  564: *
  565: *     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
  566: *
  567:       ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  568:       RETURN
  569: *
  570:   110 CONTINUE
  571: *
  572: *     ISPEC = 7:  number of processors (not used)
  573: *
  574:       ILAENV = 1
  575:       RETURN
  576: *
  577:   120 CONTINUE
  578: *
  579: *     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
  580: *
  581:       ILAENV = 50
  582:       RETURN
  583: *
  584:   130 CONTINUE
  585: *
  586: *     ISPEC = 9:  maximum size of the subproblems at the bottom of the
  587: *                 computation tree in the divide-and-conquer algorithm
  588: *                 (used by xGELSD and xGESDD)
  589: *
  590:       ILAENV = 25
  591:       RETURN
  592: *
  593:   140 CONTINUE
  594: *
  595: *     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
  596: *
  597: *     ILAENV = 0
  598:       ILAENV = 1
  599:       IF( ILAENV.EQ.1 ) THEN
  600:          ILAENV = IEEECK( 1, 0.0, 1.0 )
  601:       END IF
  602:       RETURN
  603: *
  604:   150 CONTINUE
  605: *
  606: *     ISPEC = 11: infinity arithmetic can be trusted not to trap
  607: *
  608: *     ILAENV = 0
  609:       ILAENV = 1
  610:       IF( ILAENV.EQ.1 ) THEN
  611:          ILAENV = IEEECK( 0, 0.0, 1.0 )
  612:       END IF
  613:       RETURN
  614: *
  615:   160 CONTINUE
  616: *
  617: *     12 <= ISPEC <= 16: xHSEQR or one of its subroutines. 
  618: *
  619:       ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  620:       RETURN
  621: *
  622: *     End of ILAENV
  623: *
  624:       END

CVSweb interface <joel.bertrand@systella.fr>