001:       PROGRAM MAIN
002: *
003: *  -- LAPACK test routine (version 3.2) --
004: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
005: *     November 2006
006: *
007: *     .. External Functions ..
008:       INTEGER            ILAENV
009:       EXTERNAL           ILAENV
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
010: *     ..
011: *     .. Local Scalars ..
012:       INTEGER            IEEEOK
013: *     ..
014: *     .. Executable Statements ..
015: *
016:       WRITE( 6, FMT = * )
017:      $   'We are about to check whether infinity arithmetic'
018:       WRITE( 6, FMT = * )'can be trusted.  If this test hangs, set'
019:       WRITE( 6, FMT = * )
020:      $   'ILAENV = 0 for ISPEC = 10 in LAPACK/SRC/ilaenv.f'
021: *
022:       IEEEOK = ILAENV( 10, 'ILAENV', 'N', 1, 2, 3, 4 )
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
023:       WRITE( 6, FMT = * )
024: *
025:       IF( IEEEOK.EQ.0 ) THEN
026:          WRITE( 6, FMT = * )
027:      $      'Infinity arithmetic did not perform per the ieee spec'
028:       ELSE
029:          WRITE( 6, FMT = * )
030:      $      'Infinity arithmetic performed as per the ieee spec.'
031:          WRITE( 6, FMT = * )
032:      $      'However, this is not an exhaustive test and does not'
033:          WRITE( 6, FMT = * )
034:      $      'guarantee that infinity arithmetic meets the',
035:      $      ' ieee spec.'
036:       END IF
037: *
038:       WRITE( 6, FMT = * )
039:       WRITE( 6, FMT = * )
040:      $   'We are about to check whether NaN arithmetic'
041:       WRITE( 6, FMT = * )'can be trusted.  If this test hangs, set'
042:       WRITE( 6, FMT = * )
043:      $   'ILAENV = 0 for ISPEC = 11 in LAPACK/SRC/ilaenv.f'
044:       IEEEOK = ILAENV( 11, 'ILAENV', 'N', 1, 2, 3, 4 )
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
045: *
046:       WRITE( 6, FMT = * )
047:       IF( IEEEOK.EQ.0 ) THEN
048:          WRITE( 6, FMT = * )
049:      $      'NaN arithmetic did not perform per the ieee spec'
050:       ELSE
051:          WRITE( 6, FMT = * )'NaN arithmetic performed as per the ieee',
052:      $      ' spec.'
053:          WRITE( 6, FMT = * )
054:      $      'However, this is not an exhaustive test and does not'
055:          WRITE( 6, FMT = * )'guarantee that NaN arithmetic meets the',
056:      $      ' ieee spec.'
057:       END IF
058:       WRITE( 6, FMT = * )
059: *
060:       END
061:       INTEGER          FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
062:      $                 N4 )
063: *
064: *  -- LAPACK auxiliary routine (version 3.2) --
065: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
066: *     November 2006
067: *
068: *     .. Scalar Arguments ..
069:       CHARACTER*( * )    NAME, OPTS
070:       INTEGER            ISPEC, N1, N2, N3, N4
071: *     ..
072: *
073: *  Purpose
074: *  =======
075: *
076: *  ILAENV is called from the LAPACK routines to choose problem-dependent
077: *  parameters for the local environment.  See ISPEC for a description of
078: *  the parameters.
079: *
080: *  This version provides a set of parameters which should give good,
081: *  but not optimal, performance on many of the currently available
082: *  computers.  Users are encouraged to modify this subroutine to set
083: *  the tuning parameters for their particular machine using the option
084: *  and problem size information in the arguments.
085: *
086: *  This routine will not function correctly if it is converted to all
087: *  lower case.  Converting it to all upper case is allowed.
088: *
089: *  Arguments
090: *  =========
091: *
092: *  ISPEC   (input) INTEGER
093: *          Specifies the parameter to be returned as the value of
094: *          ILAENV.
095: *          = 1: the optimal blocksize; if this value is 1, an unblocked
096: *               algorithm will give the best performance.
097: *          = 2: the minimum block size for which the block routine
098: *               should be used; if the usable block size is less than
099: *               this value, an unblocked routine should be used.
100: *          = 3: the crossover point (in a block routine, for N less
101: *               than this value, an unblocked routine should be used)
102: *          = 4: the number of shifts, used in the nonsymmetric
103: *               eigenvalue routines
104: *          = 5: the minimum column dimension for blocking to be used;
105: *               rectangular blocks must have dimension at least k by m,
106: *               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
107: *          = 6: the crossover point for the SVD (when reducing an m by n
108: *               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
109: *               this value, a QR factorization is used first to reduce
110: *               the matrix to a triangular form.)
111: *          = 7: the number of processors
112: *          = 8: the crossover point for the multishift QR and QZ methods
113: *               for nonsymmetric eigenvalue problems.
114: *          = 9: maximum size of the subproblems at the bottom of the
115: *               computation tree in the divide-and-conquer algorithm
116: *               (used by xGELSD and xGESDD)
117: *          =10: ieee NaN arithmetic can be trusted not to trap
118: *          =11: infinity arithmetic can be trusted not to trap
119: *
120: *  NAME    (input) CHARACTER*(*)
121: *          The name of the calling subroutine, in either upper case or
122: *          lower case.
123: *
124: *  OPTS    (input) CHARACTER*(*)
125: *          The character options to the subroutine NAME, concatenated
126: *          into a single character string.  For example, UPLO = 'U',
127: *          TRANS = 'T', and DIAG = 'N' for a triangular routine would
128: *          be specified as OPTS = 'UTN'.
129: *
130: *  N1      (input) INTEGER
131: *  N2      (input) INTEGER
132: *  N3      (input) INTEGER
133: *  N4      (input) INTEGER
134: *          Problem dimensions for the subroutine NAME; these may not all
135: *          be required.
136: *
137: * (ILAENV) (output) INTEGER
138: *          >= 0: the value of the parameter specified by ISPEC
139: *          < 0:  if ILAENV = -k, the k-th argument had an illegal value.
140: *
141: *  Further Details
142: *  ===============
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: *
161: *  =====================================================================
162: *
163: *     .. Local Scalars ..
164:       LOGICAL            CNAME, SNAME
165:       CHARACTER*1        C1
166:       CHARACTER*2        C2, C4
167:       CHARACTER*3        C3
168:       CHARACTER*6        SUBNAM
169:       INTEGER            I, IC, IZ, NB, NBMIN, NX
170: *     ..
171: *     .. Intrinsic Functions ..
172:       INTRINSIC          CHAR, ICHAR, INT, MIN, REAL
173: *     ..
174: *     .. External Functions ..
175:       INTEGER            IEEECK
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
176:       EXTERNAL           IEEECK
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
177: *     ..
178: *     .. Executable Statements ..
179: *
180:       GO TO ( 100, 100, 100, 400, 500, 600, 700, 800, 900, 1000,
181:      $        1100 ) ISPEC
182: *
183: *     Invalid value for ISPEC
184: *
185:       ILAENV = -1
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
186:       RETURN
187: *
188:   100 CONTINUE
189: *
190: *     Convert NAME to upper case if the first character is lower case.
191: *
192:       ILAENV = 1
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
193:       SUBNAM = NAME
194:       IC = ICHAR( SUBNAM( 1:1 ) )
195:       IZ = ICHAR( 'Z' )
196:       IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
197: *
198: *        ASCII character set
199: *
200:          IF( IC.GE.97 .AND. IC.LE.122 ) THEN
201:             SUBNAM( 1:1 ) = CHAR( IC-32 )
202:             DO 10 I = 2, 6
203:                IC = ICHAR( SUBNAM( I:I ) )
204:                IF( IC.GE.97 .AND. IC.LE.122 )
205:      $            SUBNAM( I:I ) = CHAR( IC-32 )
206:    10       CONTINUE
207:          END IF
208: *
209:       ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
210: *
211: *        EBCDIC character set
212: *
213:          IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
214:      $       ( IC.GE.145 .AND. IC.LE.153 ) .OR.
215:      $       ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
216:             SUBNAM( 1:1 ) = CHAR( IC+64 )
217:             DO 20 I = 2, 6
218:                IC = ICHAR( SUBNAM( I:I ) )
219:                IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
220:      $             ( IC.GE.145 .AND. IC.LE.153 ) .OR.
221:      $             ( IC.GE.162 .AND. IC.LE.169 ) )
222:      $            SUBNAM( I:I ) = CHAR( IC+64 )
223:    20       CONTINUE
224:          END IF
225: *
226:       ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
227: *
228: *        Prime machines:  ASCII+128
229: *
230:          IF( IC.GE.225 .AND. IC.LE.250 ) THEN
231:             SUBNAM( 1:1 ) = CHAR( IC-32 )
232:             DO 30 I = 2, 6
233:                IC = ICHAR( SUBNAM( I:I ) )
234:                IF( IC.GE.225 .AND. IC.LE.250 )
235:      $            SUBNAM( I:I ) = CHAR( IC-32 )
236:    30       CONTINUE
237:          END IF
238:       END IF
239: *
240:       C1 = SUBNAM( 1:1 )
241:       SNAME = C1.EQ.'S' .OR. C1.EQ.'D'
242:       CNAME = C1.EQ.'C' .OR. C1.EQ.'Z'
243:       IF( .NOT.( CNAME .OR. SNAME ) )
244:      $   RETURN
245:       C2 = SUBNAM( 2:3 )
246:       C3 = SUBNAM( 4:6 )
247:       C4 = C3( 2:3 )
248: *
249:       GO TO ( 110, 200, 300 ) ISPEC
250: *
251:   110 CONTINUE
252: *
253: *     ISPEC = 1:  block size
254: *
255: *     In these examples, separate code is provided for setting NB for
256: *     real and complex.  We assume that NB will take the same value in
257: *     single or double precision.
258: *
259:       NB = 1
260: *
261:       IF( C2.EQ.'GE' ) THEN
262:          IF( C3.EQ.'TRF' ) THEN
263:             IF( SNAME ) THEN
264:                NB = 64
265:             ELSE
266:                NB = 64
267:             END IF
268:          ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
269:      $            C3.EQ.'QLF' ) THEN
270:             IF( SNAME ) THEN
271:                NB = 32
272:             ELSE
273:                NB = 32
274:             END IF
275:          ELSE IF( C3.EQ.'HRD' ) THEN
276:             IF( SNAME ) THEN
277:                NB = 32
278:             ELSE
279:                NB = 32
280:             END IF
281:          ELSE IF( C3.EQ.'BRD' ) THEN
282:             IF( SNAME ) THEN
283:                NB = 32
284:             ELSE
285:                NB = 32
286:             END IF
287:          ELSE IF( C3.EQ.'TRI' ) THEN
288:             IF( SNAME ) THEN
289:                NB = 64
290:             ELSE
291:                NB = 64
292:             END IF
293:          END IF
294:       ELSE IF( C2.EQ.'PO' ) THEN
295:          IF( C3.EQ.'TRF' ) THEN
296:             IF( SNAME ) THEN
297:                NB = 64
298:             ELSE
299:                NB = 64
300:             END IF
301:          END IF
302:       ELSE IF( C2.EQ.'SY' ) THEN
303:          IF( C3.EQ.'TRF' ) THEN
304:             IF( SNAME ) THEN
305:                NB = 64
306:             ELSE
307:                NB = 64
308:             END IF
309:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
310:             NB = 32
311:          ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN
312:             NB = 64
313:          END IF
314:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
315:          IF( C3.EQ.'TRF' ) THEN
316:             NB = 64
317:          ELSE IF( C3.EQ.'TRD' ) THEN
318:             NB = 32
319:          ELSE IF( C3.EQ.'GST' ) THEN
320:             NB = 64
321:          END IF
322:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
323:          IF( C3( 1:1 ).EQ.'G' ) THEN
324:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
325:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
326:      $          C4.EQ.'BR' ) THEN
327:                NB = 32
328:             END IF
329:          ELSE IF( C3( 1:1 ).EQ.'M' ) THEN
330:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
331:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
332:      $          C4.EQ.'BR' ) THEN
333:                NB = 32
334:             END IF
335:          END IF
336:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
337:          IF( C3( 1:1 ).EQ.'G' ) THEN
338:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
339:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
340:      $          C4.EQ.'BR' ) THEN
341:                NB = 32
342:             END IF
343:          ELSE IF( C3( 1:1 ).EQ.'M' ) THEN
344:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
345:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
346:      $          C4.EQ.'BR' ) THEN
347:                NB = 32
348:             END IF
349:          END IF
350:       ELSE IF( C2.EQ.'GB' ) THEN
351:          IF( C3.EQ.'TRF' ) THEN
352:             IF( SNAME ) THEN
353:                IF( N4.LE.64 ) THEN
354:                   NB = 1
355:                ELSE
356:                   NB = 32
357:                END IF
358:             ELSE
359:                IF( N4.LE.64 ) THEN
360:                   NB = 1
361:                ELSE
362:                   NB = 32
363:                END IF
364:             END IF
365:          END IF
366:       ELSE IF( C2.EQ.'PB' ) THEN
367:          IF( C3.EQ.'TRF' ) THEN
368:             IF( SNAME ) THEN
369:                IF( N2.LE.64 ) THEN
370:                   NB = 1
371:                ELSE
372:                   NB = 32
373:                END IF
374:             ELSE
375:                IF( N2.LE.64 ) THEN
376:                   NB = 1
377:                ELSE
378:                   NB = 32
379:                END IF
380:             END IF
381:          END IF
382:       ELSE IF( C2.EQ.'TR' ) THEN
383:          IF( C3.EQ.'TRI' ) THEN
384:             IF( SNAME ) THEN
385:                NB = 64
386:             ELSE
387:                NB = 64
388:             END IF
389:          END IF
390:       ELSE IF( C2.EQ.'LA' ) THEN
391:          IF( C3.EQ.'UUM' ) THEN
392:             IF( SNAME ) THEN
393:                NB = 64
394:             ELSE
395:                NB = 64
396:             END IF
397:          END IF
398:       ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN
399:          IF( C3.EQ.'EBZ' ) THEN
400:             NB = 1
401:          END IF
402:       END IF
403:       ILAENV = NB
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
404:       RETURN
405: *
406:   200 CONTINUE
407: *
408: *     ISPEC = 2:  minimum block size
409: *
410:       NBMIN = 2
411:       IF( C2.EQ.'GE' ) THEN
412:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
413:      $       C3.EQ.'QLF' ) THEN
414:             IF( SNAME ) THEN
415:                NBMIN = 2
416:             ELSE
417:                NBMIN = 2
418:             END IF
419:          ELSE IF( C3.EQ.'HRD' ) THEN
420:             IF( SNAME ) THEN
421:                NBMIN = 2
422:             ELSE
423:                NBMIN = 2
424:             END IF
425:          ELSE IF( C3.EQ.'BRD' ) THEN
426:             IF( SNAME ) THEN
427:                NBMIN = 2
428:             ELSE
429:                NBMIN = 2
430:             END IF
431:          ELSE IF( C3.EQ.'TRI' ) THEN
432:             IF( SNAME ) THEN
433:                NBMIN = 2
434:             ELSE
435:                NBMIN = 2
436:             END IF
437:          END IF
438:       ELSE IF( C2.EQ.'SY' ) THEN
439:          IF( C3.EQ.'TRF' ) THEN
440:             IF( SNAME ) THEN
441:                NBMIN = 8
442:             ELSE
443:                NBMIN = 8
444:             END IF
445:          ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN
446:             NBMIN = 2
447:          END IF
448:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
449:          IF( C3.EQ.'TRD' ) THEN
450:             NBMIN = 2
451:          END IF
452:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
453:          IF( C3( 1:1 ).EQ.'G' ) THEN
454:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
455:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
456:      $          C4.EQ.'BR' ) THEN
457:                NBMIN = 2
458:             END IF
459:          ELSE IF( C3( 1:1 ).EQ.'M' ) THEN
460:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
461:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
462:      $          C4.EQ.'BR' ) THEN
463:                NBMIN = 2
464:             END IF
465:          END IF
466:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
467:          IF( C3( 1:1 ).EQ.'G' ) THEN
468:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
469:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
470:      $          C4.EQ.'BR' ) THEN
471:                NBMIN = 2
472:             END IF
473:          ELSE IF( C3( 1:1 ).EQ.'M' ) THEN
474:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
475:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
476:      $          C4.EQ.'BR' ) THEN
477:                NBMIN = 2
478:             END IF
479:          END IF
480:       END IF
481:       ILAENV = NBMIN
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
482:       RETURN
483: *
484:   300 CONTINUE
485: *
486: *     ISPEC = 3:  crossover point
487: *
488:       NX = 0
489:       IF( C2.EQ.'GE' ) THEN
490:          IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR.
491:      $       C3.EQ.'QLF' ) THEN
492:             IF( SNAME ) THEN
493:                NX = 128
494:             ELSE
495:                NX = 128
496:             END IF
497:          ELSE IF( C3.EQ.'HRD' ) THEN
498:             IF( SNAME ) THEN
499:                NX = 128
500:             ELSE
501:                NX = 128
502:             END IF
503:          ELSE IF( C3.EQ.'BRD' ) THEN
504:             IF( SNAME ) THEN
505:                NX = 128
506:             ELSE
507:                NX = 128
508:             END IF
509:          END IF
510:       ELSE IF( C2.EQ.'SY' ) THEN
511:          IF( SNAME .AND. C3.EQ.'TRD' ) THEN
512:             NX = 32
513:          END IF
514:       ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN
515:          IF( C3.EQ.'TRD' ) THEN
516:             NX = 32
517:          END IF
518:       ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN
519:          IF( C3( 1:1 ).EQ.'G' ) THEN
520:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
521:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
522:      $          C4.EQ.'BR' ) THEN
523:                NX = 128
524:             END IF
525:          END IF
526:       ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN
527:          IF( C3( 1:1 ).EQ.'G' ) THEN
528:             IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR.
529:      $          C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR.
530:      $          C4.EQ.'BR' ) THEN
531:                NX = 128
532:             END IF
533:          END IF
534:       END IF
535:       ILAENV = NX
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
536:       RETURN
537: *
538:   400 CONTINUE
539: *
540: *     ISPEC = 4:  number of shifts (used by xHSEQR)
541: *
542:       ILAENV = 6
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
543:       RETURN
544: *
545:   500 CONTINUE
546: *
547: *     ISPEC = 5:  minimum column dimension (not used)
548: *
549:       ILAENV = 2
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
550:       RETURN
551: *
552:   600 CONTINUE 
553: *
554: *     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD)
555: *
556:       ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 )
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
557:       RETURN
558: *
559:   700 CONTINUE
560: *
561: *     ISPEC = 7:  number of processors (not used)
562: *
563:       ILAENV = 1
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
564:       RETURN
565: *
566:   800 CONTINUE
567: *
568: *     ISPEC = 8:  crossover point for multishift (used by xHSEQR)
569: *
570:       ILAENV = 50
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
571:       RETURN
572: *
573:   900 CONTINUE
574: *
575: *     ISPEC = 9:  maximum size of the subproblems at the bottom of the
576: *                 computation tree in the divide-and-conquer algorithm
577: *                 (used by xGELSD and xGESDD)
578: *
579:       ILAENV = 25
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
580:       RETURN
581: *
582:  1000 CONTINUE
583: *
584: *     ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
585: *
586:       ILAENV = 1
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
587:       IF (ILAENV .EQ. 1) THEN
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
588:          ILAENV = IEEECK( 0, 0.0, 1.0 ) 
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
589:       ENDIF
590:       RETURN
591: *
592:  1100 CONTINUE
593: *
594: *     ISPEC = 11: infinity arithmetic can be trusted not to trap
595: *
596:       ILAENV = 1
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
597:       IF (ILAENV .EQ. 1) THEN
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
598:          ILAENV = IEEECK( 1, 0.0, 1.0 ) 
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
ILAENV -> tstiee.f:61
ILAENV -> tstiee.f:8
599:       ENDIF
600:       RETURN
601: *
602: *     End of ILAENV
603: *
604:       END
605:       INTEGER          FUNCTION IEEECK( ISPEC, ZERO, ONE ) 
606: *
607: *  -- LAPACK auxiliary routine (version 3.2) --
608: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
609: *     November 2006
610: *
611: *     .. Scalar Arguments ..
612:       INTEGER            ISPEC
613:       REAL               ZERO, ONE
614: *     ..
615: *
616: *  Purpose
617: *  =======
618: *
619: *  IEEECK is called from the ILAENV to verify that Inifinity and 
620: *  possibly NaN arithmetic is safe (i.e. will not trap).
621: *
622: *  Arguments
623: *  =========
624: *
625: *  ISPEC   (input) INTEGER
626: *          Specifies whether to test just for inifinity arithmetic
627: *          or whether to test for infinity and NaN arithmetic.
628: *          = 0: Verify infinity arithmetic only.
629: *          = 1: Verify infinity and NaN arithmetic.
630: *
631: *  ZERO    (input) REAL
632: *          Must contain the value 0.0
633: *          This is passed to prevent the compiler from optimizing 
634: *          away this code.
635: *
636: *  ONE     (input) REAL
637: *          Must contain the value 1.0
638: *          This is passed to prevent the compiler from optimizing 
639: *          away this code.
640: *
641: *  RETURN VALUE:  INTEGER
642: *          = 0:  Arithmetic failed to produce the correct answers
643: *          = 1:  Arithmetic produced the correct answers
644: *
645: *     .. Local Scalars ..
646:       REAL POSINF, NEGINF, NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGZRO,
647:      $     NEWZRO
648: *     ..
649: *     .. Executable Statements ..
650:       IEEECK = 1
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
651: 
652:       POSINF = ONE /ZERO
653:       IF ( POSINF .LE. ONE ) THEN
654:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
655:          RETURN
656:       ENDIF
657: 
658:       NEGINF = -ONE / ZERO
659:       IF ( NEGINF .GE. ZERO ) THEN
660:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
661:          RETURN
662:       ENDIF
663: 
664:       NEGZRO = ONE / ( NEGINF + ONE )
665:       IF ( NEGZRO .NE. ZERO ) THEN
666:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
667:          RETURN
668:       ENDIF
669:          
670:       NEGINF = ONE / NEGZRO 
671:       IF ( NEGINF .GE. ZERO ) THEN
672:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
673:          RETURN
674:       ENDIF
675: 
676:       NEWZRO = NEGZRO + ZERO
677:       IF ( NEWZRO .NE. ZERO ) THEN
678:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
679:          RETURN
680:       ENDIF
681:          
682:       POSINF = ONE / NEWZRO
683:       IF ( POSINF .LE. ONE ) THEN
684:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
685:          RETURN
686:       ENDIF
687: 
688:       NEGINF = NEGINF * POSINF 
689:       IF ( NEGINF .GE. ZERO ) THEN
690:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
691:          RETURN
692:       ENDIF
693: 
694:       POSINF = POSINF * POSINF 
695:       IF ( POSINF .LE. ONE ) THEN
696:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
697:          RETURN
698:       ENDIF
699: 
700: 
701: 
702: *
703: *     Return if we were only asked to check infinity arithmetic
704: *
705:       IF (ISPEC .EQ. 0 ) RETURN
706: 
707:       NAN1 = POSINF + NEGINF
708: 
709:       NAN2 = POSINF / NEGINF
710:       
711:       NAN3 = POSINF / POSINF
712:       
713:       NAN4 = POSINF * ZERO
714:       
715:       NAN5 = NEGINF * NEGZRO
716: 
717:       NAN6 = NAN5 * 0.0
718: 
719:       IF ( NAN1 .EQ. NAN1 ) THEN
720:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
721:          RETURN
722:       ENDIF
723: 
724:       IF ( NAN2 .EQ. NAN2 ) THEN
725:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
726:          RETURN
727:       ENDIF
728: 
729:       IF ( NAN3 .EQ. NAN3 ) THEN
730:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
731:          RETURN
732:       ENDIF
733: 
734:       IF ( NAN4 .EQ. NAN4 ) THEN
735:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
736:          RETURN
737:       ENDIF
738: 
739:       IF ( NAN5 .EQ. NAN5 ) THEN
740:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
741:          RETURN
742:       ENDIF
743: 
744:       IF ( NAN6 .EQ. NAN6 ) THEN
745:          IEEECK = 0
IEEECK -> ieeeck.f:1
IEEECK -> tstiee.f:605
746:          RETURN
747:       ENDIF
748: 
749:       RETURN
750:       END
751: