Annotation of rpl/lapack/lapack/ilaenv.f, revision 1.6

1.1       bertrand    1:       INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
                      2: *
                      3: *  -- LAPACK auxiliary routine (version 3.2.1)                        --
                      4: *
                      5: *  -- April 2009                                                      --
                      6: *
                      7: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
                      8: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
                      9: *
                     10: *     .. Scalar Arguments ..
                     11:       CHARACTER*( * )    NAME, OPTS
                     12:       INTEGER            ISPEC, N1, N2, N3, N4
                     13: *     ..
                     14: *
                     15: *  Purpose
                     16: *  =======
                     17: *
                     18: *  ILAENV is called from the LAPACK routines to choose problem-dependent
                     19: *  parameters for the local environment.  See ISPEC for a description of
                     20: *  the parameters.
                     21: *
                     22: *  ILAENV returns an INTEGER
                     23: *  if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC
                     24: *  if ILAENV < 0:  if ILAENV = -k, the k-th argument had an illegal value.
                     25: *
                     26: *  This version provides a set of parameters which should give good,
                     27: *  but not optimal, performance on many of the currently available
                     28: *  computers.  Users are encouraged to modify this subroutine to set
                     29: *  the tuning parameters for their particular machine using the option
                     30: *  and problem size information in the arguments.
                     31: *
                     32: *  This routine will not function correctly if it is converted to all
                     33: *  lower case.  Converting it to all upper case is allowed.
                     34: *
                     35: *  Arguments
                     36: *  =========
                     37: *
                     38: *  ISPEC   (input) INTEGER
                     39: *          Specifies the parameter to be returned as the value of
                     40: *          ILAENV.
                     41: *          = 1: the optimal blocksize; if this value is 1, an unblocked
                     42: *               algorithm will give the best performance.
                     43: *          = 2: the minimum block size for which the block routine
                     44: *               should be used; if the usable block size is less than
                     45: *               this value, an unblocked routine should be used.
                     46: *          = 3: the crossover point (in a block routine, for N less
                     47: *               than this value, an unblocked routine should be used)
                     48: *          = 4: the number of shifts, used in the nonsymmetric
                     49: *               eigenvalue routines (DEPRECATED)
                     50: *          = 5: the minimum column dimension for blocking to be used;
                     51: *               rectangular blocks must have dimension at least k by m,
                     52: *               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
                     53: *          = 6: the crossover point for the SVD (when reducing an m by n
                     54: *               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
                     55: *               this value, a QR factorization is used first to reduce
                     56: *               the matrix to a triangular form.)
                     57: *          = 7: the number of processors
                     58: *          = 8: the crossover point for the multishift QR method
                     59: *               for nonsymmetric eigenvalue problems (DEPRECATED)
                     60: *          = 9: maximum size of the subproblems at the bottom of the
                     61: *               computation tree in the divide-and-conquer algorithm
                     62: *               (used by xGELSD and xGESDD)
                     63: *          =10: ieee NaN arithmetic can be trusted not to trap
                     64: *          =11: infinity arithmetic can be trusted not to trap
                     65: *          12 <= ISPEC <= 16:
                     66: *               xHSEQR or one of its subroutines,
                     67: *               see IPARMQ for detailed explanation
                     68: *
                     69: *  NAME    (input) CHARACTER*(*)
                     70: *          The name of the calling subroutine, in either upper case or
                     71: *          lower case.
                     72: *
                     73: *  OPTS    (input) CHARACTER*(*)
                     74: *          The character options to the subroutine NAME, concatenated
                     75: *          into a single character string.  For example, UPLO = 'U',
                     76: *          TRANS = 'T', and DIAG = 'N' for a triangular routine would
                     77: *          be specified as OPTS = 'UTN'.
                     78: *
                     79: *  N1      (input) INTEGER
                     80: *  N2      (input) INTEGER
                     81: *  N3      (input) INTEGER
                     82: *  N4      (input) INTEGER
                     83: *          Problem dimensions for the subroutine NAME; these may not all
                     84: *          be required.
                     85: *
                     86: *  Further Details
                     87: *  ===============
                     88: *
                     89: *  The following conventions have been used when calling ILAENV from the
                     90: *  LAPACK routines:
                     91: *  1)  OPTS is a concatenation of all of the character options to
                     92: *      subroutine NAME, in the same order that they appear in the
                     93: *      argument list for NAME, even if they are not used in determining
                     94: *      the value of the parameter specified by ISPEC.
                     95: *  2)  The problem dimensions N1, N2, N3, N4 are specified in the order
                     96: *      that they appear in the argument list for NAME.  N1 is used
                     97: *      first, N2 second, and so on, and unused problem dimensions are
                     98: *      passed a value of -1.
                     99: *  3)  The parameter value returned by ILAENV is checked for validity in
                    100: *      the calling subroutine.  For example, ILAENV is used to retrieve
                    101: *      the optimal blocksize for STRTRI as follows:
                    102: *
                    103: *      NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
                    104: *      IF( NB.LE.1 ) NB = MAX( 1, N )
                    105: *
                    106: *  =====================================================================
                    107: *
                    108: *     .. Local Scalars ..
                    109:       INTEGER            I, IC, IZ, NB, NBMIN, NX
                    110:       LOGICAL            CNAME, SNAME
                    111:       CHARACTER          C1*1, C2*2, C4*2, C3*3, SUBNAM*6
                    112: *     ..
                    113: *     .. Intrinsic Functions ..
                    114:       INTRINSIC          CHAR, ICHAR, INT, MIN, REAL
                    115: *     ..
                    116: *     .. External Functions ..
                    117:       INTEGER            IEEECK, IPARMQ
                    118:       EXTERNAL           IEEECK, IPARMQ
                    119: *     ..
                    120: *     .. Executable Statements ..
                    121: *
                    122:       GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
                    123:      $        130, 140, 150, 160, 160, 160, 160, 160 )ISPEC
                    124: *
                    125: *     Invalid value for ISPEC
                    126: *
                    127:       ILAENV = -1
                    128:       RETURN
                    129: *
                    130:    10 CONTINUE
                    131: *
                    132: *     Convert NAME to upper case if the first character is lower case.
                    133: *
                    134:       ILAENV = 1
                    135:       SUBNAM = NAME
                    136:       IC = ICHAR( SUBNAM( 1: 1 ) )
                    137:       IZ = ICHAR( 'Z' )
                    138:       IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
                    139: *
                    140: *        ASCII character set
                    141: *
                    142:          IF( IC.GE.97 .AND. IC.LE.122 ) THEN
                    143:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
                    144:             DO 20 I = 2, 6
                    145:                IC = ICHAR( SUBNAM( I: I ) )
                    146:                IF( IC.GE.97 .AND. IC.LE.122 )
                    147:      $            SUBNAM( I: I ) = CHAR( IC-32 )
                    148:    20       CONTINUE
                    149:          END IF
                    150: *
                    151:       ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
                    152: *
                    153: *        EBCDIC character set
                    154: *
                    155:          IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
                    156:      $       ( IC.GE.145 .AND. IC.LE.153 ) .OR.
                    157:      $       ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
                    158:             SUBNAM( 1: 1 ) = CHAR( IC+64 )
                    159:             DO 30 I = 2, 6
                    160:                IC = ICHAR( SUBNAM( I: I ) )
                    161:                IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
                    162:      $             ( IC.GE.145 .AND. IC.LE.153 ) .OR.
                    163:      $             ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
                    164:      $             I ) = CHAR( IC+64 )
                    165:    30       CONTINUE
                    166:          END IF
                    167: *
                    168:       ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
                    169: *
                    170: *        Prime machines:  ASCII+128
                    171: *
                    172:          IF( IC.GE.225 .AND. IC.LE.250 ) THEN
                    173:             SUBNAM( 1: 1 ) = CHAR( IC-32 )
                    174:             DO 40 I = 2, 6
                    175:                IC = ICHAR( SUBNAM( I: I ) )
                    176:                IF( IC.GE.225 .AND. IC.LE.250 )
                    177:      $            SUBNAM( I: I ) = CHAR( IC-32 )
                    178:    40       CONTINUE
                    179:          END IF
                    180:       END IF
                    181: *
                    182:       C1 = SUBNAM( 1: 1 )
                    183:       SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
                    184:       CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
                    185:       IF( .NOT.( CNAME .OR. SNAME ) )
                    186:      $   RETURN
                    187:       C2 = SUBNAM( 2: 3 )
                    188:       C3 = SUBNAM( 4: 6 )
                    189:       C4 = C3( 2: 3 )
                    190: *
                    191:       GO TO ( 50, 60, 70 )ISPEC
                    192: *
                    193:    50 CONTINUE
                    194: *
                    195: *     ISPEC = 1:  block size
                    196: *
                    197: *     In these examples, separate code is provided for setting NB for
                    198: *     real and complex.  We assume that NB will take the same value in
                    199: *     single or double precision.
                    200: *
                    201:       NB = 1
                    202: *
                    203:       IF( C2.EQ.'GE' ) THEN
                    204:          IF( C3.EQ.'TRF' ) THEN
                    205:             IF( SNAME ) THEN
                    206:                NB = 64
                    207:             ELSE
                    208:                NB = 64
                    209:             END IF
                    210:          ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
                    211:      $            C3.EQ.'QLF' ) THEN
                    212:             IF( SNAME ) THEN
                    213:                NB = 32
                    214:             ELSE
                    215:                NB = 32
                    216:             END IF
                    217:          ELSE IF( C3.EQ.'HRD' ) THEN
                    218:             IF( SNAME ) THEN
                    219:                NB = 32
                    220:             ELSE
                    221:                NB = 32
                    222:             END IF
                    223:          ELSE IF( C3.EQ.'BRD' ) THEN
                    224:             IF( SNAME ) THEN
                    225:                NB = 32
                    226:             ELSE
                    227:                NB = 32
                    228:             END IF
                    229:          ELSE IF( C3.EQ.'TRI' ) THEN
                    230:             IF( SNAME ) THEN
                    231:                NB = 64
                    232:             ELSE
                    233:                NB = 64
                    234:             END IF
                    235:          END IF
                    236:       ELSE IF( C2.EQ.'PO' ) THEN
                    237:          IF( C3.EQ.'TRF' ) THEN
                    238:             IF( SNAME ) THEN
                    239:                NB = 64
                    240:             ELSE
                    241:                NB = 64
                    242:             END IF
                    243:          END IF
                    244:       ELSE IF( C2.EQ.'SY' ) THEN
                    245:          IF( C3.EQ.'TRF' ) THEN
                    246:             IF( SNAME ) THEN
                    247:                NB = 64
                    248:             ELSE
                    249:                NB = 64
                    250:             END IF
                    251:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
                    252:             NB = 32
                    253:          ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
                    254:             NB = 64
                    255:          END IF
                    256:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
                    257:          IF( C3.EQ.'TRF' ) THEN
                    258:             NB = 64
                    259:          ELSE IF( C3.EQ.'TRD' ) THEN
                    260:             NB = 32
                    261:          ELSE IF( C3.EQ.'GST' ) THEN
                    262:             NB = 64
                    263:          END IF
                    264:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
                    265:          IF( C3( 1: 1 ).EQ.'G' ) THEN
                    266:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    267:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    268:      $           THEN
                    269:                NB = 32
                    270:             END IF
                    271:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
                    272:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    273:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    274:      $           THEN
                    275:                NB = 32
                    276:             END IF
                    277:          END IF
                    278:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
                    279:          IF( C3( 1: 1 ).EQ.'G' ) THEN
                    280:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    281:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    282:      $           THEN
                    283:                NB = 32
                    284:             END IF
                    285:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
                    286:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    287:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    288:      $           THEN
                    289:                NB = 32
                    290:             END IF
                    291:          END IF
                    292:       ELSE IF( C2.EQ.'GB' ) THEN
                    293:          IF( C3.EQ.'TRF' ) THEN
                    294:             IF( SNAME ) THEN
                    295:                IF( N4.LE.64 ) THEN
                    296:                   NB = 1
                    297:                ELSE
                    298:                   NB = 32
                    299:                END IF
                    300:             ELSE
                    301:                IF( N4.LE.64 ) THEN
                    302:                   NB = 1
                    303:                ELSE
                    304:                   NB = 32
                    305:                END IF
                    306:             END IF
                    307:          END IF
                    308:       ELSE IF( C2.EQ.'PB' ) THEN
                    309:          IF( C3.EQ.'TRF' ) THEN
                    310:             IF( SNAME ) THEN
                    311:                IF( N2.LE.64 ) THEN
                    312:                   NB = 1
                    313:                ELSE
                    314:                   NB = 32
                    315:                END IF
                    316:             ELSE
                    317:                IF( N2.LE.64 ) THEN
                    318:                   NB = 1
                    319:                ELSE
                    320:                   NB = 32
                    321:                END IF
                    322:             END IF
                    323:          END IF
                    324:       ELSE IF( C2.EQ.'TR' ) THEN
                    325:          IF( C3.EQ.'TRI' ) THEN
                    326:             IF( SNAME ) THEN
                    327:                NB = 64
                    328:             ELSE
                    329:                NB = 64
                    330:             END IF
                    331:          END IF
                    332:       ELSE IF( C2.EQ.'LA' ) THEN
                    333:          IF( C3.EQ.'UUM' ) THEN
                    334:             IF( SNAME ) THEN
                    335:                NB = 64
                    336:             ELSE
                    337:                NB = 64
                    338:             END IF
                    339:          END IF
                    340:       ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
                    341:          IF( C3.EQ.'EBZ' ) THEN
                    342:             NB = 1
                    343:          END IF
                    344:       END IF
                    345:       ILAENV = NB
                    346:       RETURN
                    347: *
                    348:    60 CONTINUE
                    349: *
                    350: *     ISPEC = 2:  minimum block size
                    351: *
                    352:       NBMIN = 2
                    353:       IF( C2.EQ.'GE' ) THEN
                    354:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ.
                    355:      $       'QLF' ) THEN
                    356:             IF( SNAME ) THEN
                    357:                NBMIN = 2
                    358:             ELSE
                    359:                NBMIN = 2
                    360:             END IF
                    361:          ELSE IF( C3.EQ.'HRD' ) THEN
                    362:             IF( SNAME ) THEN
                    363:                NBMIN = 2
                    364:             ELSE
                    365:                NBMIN = 2
                    366:             END IF
                    367:          ELSE IF( C3.EQ.'BRD' ) THEN
                    368:             IF( SNAME ) THEN
                    369:                NBMIN = 2
                    370:             ELSE
                    371:                NBMIN = 2
                    372:             END IF
                    373:          ELSE IF( C3.EQ.'TRI' ) THEN
                    374:             IF( SNAME ) THEN
                    375:                NBMIN = 2
                    376:             ELSE
                    377:                NBMIN = 2
                    378:             END IF
                    379:          END IF
                    380:       ELSE IF( C2.EQ.'SY' ) THEN
                    381:          IF( C3.EQ.'TRF' ) THEN
                    382:             IF( SNAME ) THEN
                    383:                NBMIN = 8
                    384:             ELSE
                    385:                NBMIN = 8
                    386:             END IF
                    387:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
                    388:             NBMIN = 2
                    389:          END IF
                    390:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
                    391:          IF( C3.EQ.'TRD' ) THEN
                    392:             NBMIN = 2
                    393:          END IF
                    394:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) 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:                NBMIN = 2
                    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:                NBMIN = 2
                    406:             END IF
                    407:          END IF
                    408:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
                    409:          IF( C3( 1: 1 ).EQ.'G' ) THEN
                    410:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    411:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    412:      $           THEN
                    413:                NBMIN = 2
                    414:             END IF
                    415:          ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN
                    416:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    417:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    418:      $           THEN
                    419:                NBMIN = 2
                    420:             END IF
                    421:          END IF
                    422:       END IF
                    423:       ILAENV = NBMIN
                    424:       RETURN
                    425: *
                    426:    70 CONTINUE
                    427: *
                    428: *     ISPEC = 3:  crossover point
                    429: *
                    430:       NX = 0
                    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:                NX = 128
                    436:             ELSE
                    437:                NX = 128
                    438:             END IF
                    439:          ELSE IF( C3.EQ.'HRD' ) THEN
                    440:             IF( SNAME ) THEN
                    441:                NX = 128
                    442:             ELSE
                    443:                NX = 128
                    444:             END IF
                    445:          ELSE IF( C3.EQ.'BRD' ) THEN
                    446:             IF( SNAME ) THEN
                    447:                NX = 128
                    448:             ELSE
                    449:                NX = 128
                    450:             END IF
                    451:          END IF
                    452:       ELSE IF( C2.EQ.'SY' ) THEN
                    453:          IF( SNAME .AND. C3.EQ.'TRD' ) THEN
                    454:             NX = 32
                    455:          END IF
                    456:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
                    457:          IF( C3.EQ.'TRD' ) THEN
                    458:             NX = 32
                    459:          END IF
                    460:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
                    461:          IF( C3( 1: 1 ).EQ.'G' ) THEN
                    462:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    463:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    464:      $           THEN
                    465:                NX = 128
                    466:             END IF
                    467:          END IF
                    468:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
                    469:          IF( C3( 1: 1 ).EQ.'G' ) THEN
                    470:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ.
                    471:      $          'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' )
                    472:      $           THEN
                    473:                NX = 128
                    474:             END IF
                    475:          END IF
                    476:       END IF
                    477:       ILAENV = NX
                    478:       RETURN
                    479: *
                    480:    80 CONTINUE
                    481: *
                    482: *     ISPEC = 4:  number of shifts (used by xHSEQR)
                    483: *
                    484:       ILAENV = 6
                    485:       RETURN
                    486: *
                    487:    90 CONTINUE
                    488: *
                    489: *     ISPEC = 5:  minimum column dimension (not used)
                    490: *
                    491:       ILAENV = 2
                    492:       RETURN
                    493: *
                    494:   100 CONTINUE
                    495: *
                    496: *     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
                    497: *
                    498:       ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
                    499:       RETURN
                    500: *
                    501:   110 CONTINUE
                    502: *
                    503: *     ISPEC = 7:  number of processors (not used)
                    504: *
                    505:       ILAENV = 1
                    506:       RETURN
                    507: *
                    508:   120 CONTINUE
                    509: *
                    510: *     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
                    511: *
                    512:       ILAENV = 50
                    513:       RETURN
                    514: *
                    515:   130 CONTINUE
                    516: *
                    517: *     ISPEC = 9:  maximum size of the subproblems at the bottom of the
                    518: *                 computation tree in the divide-and-conquer algorithm
                    519: *                 (used by xGELSD and xGESDD)
                    520: *
                    521:       ILAENV = 25
                    522:       RETURN
                    523: *
                    524:   140 CONTINUE
                    525: *
                    526: *     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
                    527: *
                    528: *     ILAENV = 0
                    529:       ILAENV = 1
                    530:       IF( ILAENV.EQ.1 ) THEN
                    531:          ILAENV = IEEECK( 1, 0.0, 1.0 )
                    532:       END IF
                    533:       RETURN
                    534: *
                    535:   150 CONTINUE
                    536: *
                    537: *     ISPEC = 11: infinity arithmetic can be trusted not to trap
                    538: *
                    539: *     ILAENV = 0
                    540:       ILAENV = 1
                    541:       IF( ILAENV.EQ.1 ) THEN
                    542:          ILAENV = IEEECK( 0, 0.0, 1.0 )
                    543:       END IF
                    544:       RETURN
                    545: *
                    546:   160 CONTINUE
                    547: *
                    548: *     12 <= ISPEC <= 16: xHSEQR or one of its subroutines. 
                    549: *
                    550:       ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
                    551:       RETURN
                    552: *
                    553: *     End of ILAENV
                    554: *
                    555:       END

CVSweb interface <joel.bertrand@systella.fr>