File:  [local] / rpl / lapack / lapack / ilaenv.f
Revision 1.14: download - view: text, annotated - select for diffs - revision graph
Thu Nov 26 11:44:21 2015 UTC (8 years, 5 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_24, HEAD
Mise à jour de Lapack (3.6.0) et du numéro de version du RPL/2.

    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 November 2015
  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.6.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 2015
  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:       ELSE IF( C2.EQ.'GG' ) THEN
  414:          NB = 32
  415:          IF( C3.EQ.'HD3' ) THEN
  416:             IF( SNAME ) THEN
  417:                NB = 32
  418:             ELSE
  419:                NB = 32
  420:             END IF
  421:          END IF
  422:       END IF
  423:       ILAENV = NB
  424:       RETURN
  425: *
  426:    60 CONTINUE
  427: *
  428: *     ISPEC = 2:  minimum block size
  429: *
  430:       NBMIN = 2
  431:       IF( C2.EQ.'GE' ) THEN
  432:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  433:      $       'QLF' ) THEN
  434:             IF( SNAME ) THEN
  435:                NBMIN = 2
  436:             ELSE
  437:                NBMIN = 2
  438:             END IF
  439:          ELSE IF( C3.EQ.'HRD' ) THEN
  440:             IF( SNAME ) THEN
  441:                NBMIN = 2
  442:             ELSE
  443:                NBMIN = 2
  444:             END IF
  445:          ELSE IF( C3.EQ.'BRD' ) THEN
  446:             IF( SNAME ) THEN
  447:                NBMIN = 2
  448:             ELSE
  449:                NBMIN = 2
  450:             END IF
  451:          ELSE IF( C3.EQ.'TRI' ) THEN
  452:             IF( SNAME ) THEN
  453:                NBMIN = 2
  454:             ELSE
  455:                NBMIN = 2
  456:             END IF
  457:          END IF
  458:       ELSE IF( C2.EQ.'SY' ) THEN
  459:          IF( C3.EQ.'TRF' ) THEN
  460:             IF( SNAME ) THEN
  461:                NBMIN = 8
  462:             ELSE
  463:                NBMIN = 8
  464:             END IF
  465:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  466:             NBMIN = 2
  467:          END IF
  468:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  469:          IF( C3.EQ.'TRD' ) THEN
  470:             NBMIN = 2
  471:          END IF
  472:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  473:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  474:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  475:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  476:      $           THEN
  477:                NBMIN = 2
  478:             END IF
  479:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  480:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  481:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  482:      $           THEN
  483:                NBMIN = 2
  484:             END IF
  485:          END IF
  486:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  487:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  488:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  489:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  490:      $           THEN
  491:                NBMIN = 2
  492:             END IF
  493:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
  494:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  495:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  496:      $           THEN
  497:                NBMIN = 2
  498:             END IF
  499:          END IF
  500:       ELSE IF( C2.EQ.'GG' ) THEN
  501:          NBMIN = 2
  502:          IF( C3.EQ.'HD3' ) THEN
  503:             NBMIN = 2
  504:          END IF
  505:       END IF
  506:       ILAENV = NBMIN
  507:       RETURN
  508: *
  509:    70 CONTINUE
  510: *
  511: *     ISPEC = 3:  crossover point
  512: *
  513:       NX = 0
  514:       IF( C2.EQ.'GE' ) THEN
  515:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
  516:      $       'QLF' ) THEN
  517:             IF( SNAME ) THEN
  518:                NX = 128
  519:             ELSE
  520:                NX = 128
  521:             END IF
  522:          ELSE IF( C3.EQ.'HRD' ) THEN
  523:             IF( SNAME ) THEN
  524:                NX = 128
  525:             ELSE
  526:                NX = 128
  527:             END IF
  528:          ELSE IF( C3.EQ.'BRD' ) THEN
  529:             IF( SNAME ) THEN
  530:                NX = 128
  531:             ELSE
  532:                NX = 128
  533:             END IF
  534:          END IF
  535:       ELSE IF( C2.EQ.'SY' ) THEN
  536:          IF( SNAME .AND. C3.EQ.'TRD' ) THEN
  537:             NX = 32
  538:          END IF
  539:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
  540:          IF( C3.EQ.'TRD' ) THEN
  541:             NX = 32
  542:          END IF
  543:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
  544:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  545:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  546:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  547:      $           THEN
  548:                NX = 128
  549:             END IF
  550:          END IF
  551:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
  552:          IF( C3( 1: 1 ).EQ.'G' ) THEN
  553:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
  554:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
  555:      $           THEN
  556:                NX = 128
  557:             END IF
  558:          END IF
  559:       ELSE IF( C2.EQ.'GG' ) THEN
  560:          NX = 128
  561:          IF( C3.EQ.'HD3' ) THEN
  562:             NX = 128
  563:          END IF
  564:       END IF
  565:       ILAENV = NX
  566:       RETURN
  567: *
  568:    80 CONTINUE
  569: *
  570: *     ISPEC = 4:  number of shifts (used by xHSEQR)
  571: *
  572:       ILAENV = 6
  573:       RETURN
  574: *
  575:    90 CONTINUE
  576: *
  577: *     ISPEC = 5:  minimum column dimension (not used)
  578: *
  579:       ILAENV = 2
  580:       RETURN
  581: *
  582:   100 CONTINUE
  583: *
  584: *     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
  585: *
  586:       ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
  587:       RETURN
  588: *
  589:   110 CONTINUE
  590: *
  591: *     ISPEC = 7:  number of processors (not used)
  592: *
  593:       ILAENV = 1
  594:       RETURN
  595: *
  596:   120 CONTINUE
  597: *
  598: *     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
  599: *
  600:       ILAENV = 50
  601:       RETURN
  602: *
  603:   130 CONTINUE
  604: *
  605: *     ISPEC = 9:  maximum size of the subproblems at the bottom of the
  606: *                 computation tree in the divide-and-conquer algorithm
  607: *                 (used by xGELSD and xGESDD)
  608: *
  609:       ILAENV = 25
  610:       RETURN
  611: *
  612:   140 CONTINUE
  613: *
  614: *     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
  615: *
  616: *     ILAENV = 0
  617:       ILAENV = 1
  618:       IF( ILAENV.EQ.1 ) THEN
  619:          ILAENV = IEEECK( 1, 0.0, 1.0 )
  620:       END IF
  621:       RETURN
  622: *
  623:   150 CONTINUE
  624: *
  625: *     ISPEC = 11: infinity arithmetic can be trusted not to trap
  626: *
  627: *     ILAENV = 0
  628:       ILAENV = 1
  629:       IF( ILAENV.EQ.1 ) THEN
  630:          ILAENV = IEEECK( 0, 0.0, 1.0 )
  631:       END IF
  632:       RETURN
  633: *
  634:   160 CONTINUE
  635: *
  636: *     12 <= ISPEC <= 16: xHSEQR or related subroutines.
  637: *
  638:       ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  639:       RETURN
  640: *
  641: *     End of ILAENV
  642: *
  643:       END

CVSweb interface <joel.bertrand@systella.fr>