The R Project SVN R

Rev

Rev 22159 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 22159 Rev 22555
Line 132... Line 132...
132
*     .. External Subroutines ..
132
*     .. External Subroutines ..
133
      EXTERNAL           DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLACPY, DLARTG,
133
      EXTERNAL           DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLACPY, DLARTG,
134
     $                   DLASCL, DORGHR, DROT, DSCAL, DTREVC, XERBLA
134
     $                   DLASCL, DORGHR, DROT, DSCAL, DTREVC, XERBLA
135
*     ..
135
*     ..
136
*     .. External Functions ..
136
*     .. External Functions ..
137
      LOGICAL            LSAME
137
      LOGICAL            LSAMER
138
      INTEGER            IDAMAX, ILAENV
138
      INTEGER            IDAMAX, ILAENV
139
      DOUBLE PRECISION   DLAMCH, RLANGE, DLAPY2, DNRM2
139
      DOUBLE PRECISION   DLAMCH, RLANGE, DLAPY2, DNRM2
140
      EXTERNAL           LSAME, IDAMAX, ILAENV, DLAMCH, RLANGE, DLAPY2,
140
      EXTERNAL           LSAMER, IDAMAX, ILAENV, DLAMCH, RLANGE, DLAPY2,
141
     $                   DNRM2
141
     $                   DNRM2
142
*     ..
142
*     ..
143
*     .. Intrinsic Functions ..
143
*     .. Intrinsic Functions ..
144
      INTRINSIC          MAX, MIN, SQRT
144
      INTRINSIC          MAX, MIN, SQRT
145
*     ..
145
*     ..
Line 147... Line 147...
147
*
147
*
148
*     Test the input arguments
148
*     Test the input arguments
149
*
149
*
150
      INFO = 0
150
      INFO = 0
151
      LQUERY = ( LWORK.EQ.-1 )
151
      LQUERY = ( LWORK.EQ.-1 )
152
      WANTVL = LSAME( JOBVL, 'V' )
152
      WANTVL = LSAMER( JOBVL, 'V' )
153
      WANTVR = LSAME( JOBVR, 'V' )
153
      WANTVR = LSAMER( JOBVR, 'V' )
154
      IF( ( .NOT.WANTVL ) .AND. ( .NOT.LSAME( JOBVL, 'N' ) ) ) THEN
154
      IF( ( .NOT.WANTVL ) .AND. ( .NOT.LSAMER( JOBVL, 'N' ) ) ) THEN
155
         INFO = -1
155
         INFO = -1
156
      ELSE IF( ( .NOT.WANTVR ) .AND. ( .NOT.LSAME( JOBVR, 'N' ) ) ) THEN
156
      ELSE IF( ( .NOT.WANTVR ) .AND. (.NOT.LSAMER( JOBVR, 'N' ) ) ) THEN
157
         INFO = -2
157
         INFO = -2
158
      ELSE IF( N.LT.0 ) THEN
158
      ELSE IF( N.LT.0 ) THEN
159
         INFO = -3
159
         INFO = -3
160
      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
160
      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
161
         INFO = -5
161
         INFO = -5
Line 484... Line 484...
484
*     ..
484
*     ..
485
*     .. External Subroutines ..
485
*     .. External Subroutines ..
486
      EXTERNAL           DLASSQ
486
      EXTERNAL           DLASSQ
487
*     ..
487
*     ..
488
*     .. External Functions ..
488
*     .. External Functions ..
489
      LOGICAL            LSAME
489
      LOGICAL            LSAMER
490
      EXTERNAL           LSAME
490
      EXTERNAL           LSAMER
491
*     ..
491
*     ..
492
*     .. Intrinsic Functions ..
492
*     .. Intrinsic Functions ..
493
      INTRINSIC          ABS, MAX, MIN, SQRT
493
      INTRINSIC          ABS, MAX, MIN, SQRT
494
*     ..
494
*     ..
495
*     .. Executable Statements ..
495
*     .. Executable Statements ..
496
*
496
*
497
      IF( MIN( M, N ).EQ.0 ) THEN
497
      IF( MIN( M, N ).EQ.0 ) THEN
498
         VALUE = ZERO
498
         VALUE = ZERO
499
      ELSE IF( LSAME( NORM, 'M' ) ) THEN
499
      ELSE IF( LSAMER( NORM, 'M' ) ) THEN
500
*
500
*
501
*        Find max(abs(A(i,j))).
501
*        Find max(abs(A(i,j))).
502
*
502
*
503
         VALUE = ZERO
503
         VALUE = ZERO
504
         DO 20 J = 1, N
504
         DO 20 J = 1, N
505
            DO 10 I = 1, M
505
            DO 10 I = 1, M
506
               VALUE = MAX( VALUE, ABS( A( I, J ) ) )
506
               VALUE = MAX( VALUE, ABS( A( I, J ) ) )
507
   10       CONTINUE
507
   10       CONTINUE
508
   20    CONTINUE
508
   20    CONTINUE
509
      ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN
509
      ELSE IF( ( LSAMER( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN
510
*
510
*
511
*        Find norm1(A).
511
*        Find norm1(A).
512
*
512
*
513
         VALUE = ZERO
513
         VALUE = ZERO
514
         DO 40 J = 1, N
514
         DO 40 J = 1, N
Line 516... Line 516...
516
            DO 30 I = 1, M
516
            DO 30 I = 1, M
517
               SUM = SUM + ABS( A( I, J ) )
517
               SUM = SUM + ABS( A( I, J ) )
518
   30       CONTINUE
518
   30       CONTINUE
519
            VALUE = MAX( VALUE, SUM )
519
            VALUE = MAX( VALUE, SUM )
520
   40    CONTINUE
520
   40    CONTINUE
521
      ELSE IF( LSAME( NORM, 'I' ) ) THEN
521
      ELSE IF( LSAMER( NORM, 'I' ) ) THEN
522
*
522
*
523
*        Find normI(A).
523
*        Find normI(A).
524
*
524
*
525
         DO 50 I = 1, M
525
         DO 50 I = 1, M
526
            WORK( I ) = ZERO
526
            WORK( I ) = ZERO
Line 532... Line 532...
532
   70    CONTINUE
532
   70    CONTINUE
533
         VALUE = ZERO
533
         VALUE = ZERO
534
         DO 80 I = 1, M
534
         DO 80 I = 1, M
535
            VALUE = MAX( VALUE, WORK( I ) )
535
            VALUE = MAX( VALUE, WORK( I ) )
536
   80    CONTINUE
536
   80    CONTINUE
537
      ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
537
      ELSE IF( (LSAMER( NORM, 'F' ) ) .OR. (LSAMER( NORM, 'E' ) ) ) THEN
538
*
538
*
539
*        Find normF(A).
539
*        Find normF(A).
540
*
540
*
541
         SCALE = ZERO
541
         SCALE = ZERO
542
         SUM = ONE
542
         SUM = ONE
Line 550... Line 550...
550
      RETURN
550
      RETURN
551
*
551
*
552
*     End of DLANGE
552
*     End of DLANGE
553
      END
553
      END
554
 
554
 
-
 
555
      LOGICAL          FUNCTION LSAMER( CA, CB )
-
 
556
*
-
 
557
*  -- LAPACK auxiliary routine (version 3.0) --
-
 
558
*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
-
 
559
*     Courant Institute, Argonne National Lab, and Rice University
-
 
560
*     September 30, 1994
-
 
561
*
-
 
562
*     .. Scalar Arguments ..
-
 
563
      CHARACTER          CA, CB
-
 
564
*     ..
-
 
565
*
-
 
566
*  Purpose
-
 
567
*  =======
-
 
568
*
-
 
569
*  LSAME returns .TRUE. if CA is the same letter as CB regardless of
-
 
570
*  case.
-
 
571
*
-
 
572
*  Arguments
-
 
573
*  =========
-
 
574
*
-
 
575
*  CA      (input) CHARACTER*1
-
 
576
*  CB      (input) CHARACTER*1
-
 
577
*          CA and CB specify the single characters to be compared.
-
 
578
*
-
 
579
* =====================================================================
-
 
580
*
-
 
581
*     .. Intrinsic Functions ..
-
 
582
      INTRINSIC          ICHAR
-
 
583
*     ..
-
 
584
*     .. Local Scalars ..
-
 
585
      INTEGER            INTA, INTB, ZCODE
-
 
586
*     ..
-
 
587
*     .. Executable Statements ..
-
 
588
*
-
 
589
*     Test if the characters are equal
-
 
590
*
-
 
591
      LSAMER = CA.EQ.CB
-
 
592
      IF( LSAMER )
-
 
593
     $   RETURN
-
 
594
*
-
 
595
*     Now test for equivalence if both characters are alphabetic.
-
 
596
*
-
 
597
      ZCODE = ICHAR( 'Z' )
-
 
598
*
-
 
599
*     Use 'Z' rather than 'A' so that ASCII can be detected on Prime
-
 
600
*     machines, on which ICHAR returns a value with bit 8 set.
-
 
601
*     ICHAR('A') on Prime machines returns 193 which is the same as
-
 
602
*     ICHAR('A') on an EBCDIC machine.
-
 
603
*
-
 
604
      INTA = ICHAR( CA )
-
 
605
      INTB = ICHAR( CB )
-
 
606
*
-
 
607
      IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN
-
 
608
*
-
 
609
*        ASCII is assumed - ZCODE is the ASCII code of either lower or
-
 
610
*        upper case 'Z'.
-
 
611
*
-
 
612
         IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32
-
 
613
         IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32
-
 
614
*
-
 
615
      ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN
-
 
616
*
-
 
617
*        EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or
-
 
618
*        upper case 'Z'.
-
 
619
*
-
 
620
         IF( INTA.GE.129 .AND. INTA.LE.137 .OR.
-
 
621
     $       INTA.GE.145 .AND. INTA.LE.153 .OR.
-
 
622
     $       INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64
-
 
623
         IF( INTB.GE.129 .AND. INTB.LE.137 .OR.
-
 
624
     $       INTB.GE.145 .AND. INTB.LE.153 .OR.
-
 
625
     $       INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64
-
 
626
*
-
 
627
      ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN
-
 
628
*
-
 
629
*        ASCII is assumed, on Prime machines - ZCODE is the ASCII code
-
 
630
*        plus 128 of either lower or upper case 'Z'.
-
 
631
*
-
 
632
         IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32
-
 
633
         IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32
-
 
634
      END IF
-
 
635
      LSAMER = INTA.EQ.INTB
-
 
636
*
-
 
637
*     RETURN
-
 
638
*
-
 
639
*     End of LSAME
-
 
640
*
-
 
641
      END