1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
     100
     101
     102
     103
     104
     105
     106
     107
     108
     109
     110
     111
     112
     113
     114
     115
     116
     117
     118
     119
     120
     121
     122
     123
     124
     125
     126
     127
     128
     129
     130
     131
     132
     133
     134
     135
     136
     137
     138
     139
     140
     141
     142
     143
     144
     145
     146
     147
     148
     149
     150
     151
     152
     153
     154
     155
     156
     157
     158
     159
     160
     161
     162
     163
     164
     165
     166
     167
     168
     169
     170
     171
     172
     173
     174
     175
     176
     177
     178
     179
      SUBROUTINE DGET33RMAXLMAXNINFOKNT )
*
*  -- LAPACK test routine (version 3.1) --
*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
*     November 2006
*
*     .. Scalar Arguments ..
      INTEGER            KNTLMAXNINFO
      DOUBLE PRECISION   RMAX
*     ..
*
*  Purpose
*  =======
*
*  DGET33 tests DLANV2, a routine for putting 2 by 2 blocks into
*  standard form.  In other words, it computes a two by two rotation
*  [[C,S];[-S,C]] where in
*
*     [ C S ][T(1,1) T(1,2)][ C -S ] = [ T11 T12 ]
*     [-S C ][T(2,1) T(2,2)][ S  C ]   [ T21 T22 ]
*
*  either
*     1) T21=0 (real eigenvalues), or
*     2) T11=T22 and T21*T12<0 (complex conjugate eigenvalues).
*  We also  verify that the residual is small.
*
*  Arguments
*  ==========
*
*  RMAX    (output) DOUBLE PRECISION
*          Value of the largest test ratio.
*
*  LMAX    (output) INTEGER
*          Example number where largest test ratio achieved.
*
*  NINFO   (output) INTEGER
*          Number of examples returned with INFO .NE. 0.
*
*  KNT     (output) INTEGER
*          Total number of examples tested.
*
*  =====================================================================
*
*     .. Parameters ..
      DOUBLE PRECISION   ZEROONE
      PARAMETER          ( ZERO = 0.0D0ONE = 1.0D0 )
      DOUBLE PRECISION   TWOFOUR
      PARAMETER          ( TWO = 2.0D0FOUR = 4.0D0 )
*     ..
*     .. Local Scalars ..
      INTEGER            I1I2I3I4IM1IM2IM3IM4J1J2J3
      DOUBLE PRECISION   BIGNUMCSEPSRESSMLNUMSNSUMTNRM,
     $                   WI1WI2WR1WR2
*     ..
*     .. Local Arrays ..
      DOUBLE PRECISION   Q22 ), T22 ), T122 ), T222 ),
     $                   VAL4 ), VM3 )
*     ..
*     .. External Functions ..
      DOUBLE PRECISION   DLAMCH
      EXTERNAL           DLAMCH
*     ..
*     .. External Subroutines ..
      EXTERNAL           DLABADDLANV2
*     ..
*     .. Intrinsic Functions ..
      INTRINSIC          ABSMAXSIGN
*     ..
*     .. Executable Statements ..
*
*     Get machine parameters
*
      EPS = DLAMCH'P' )
      SMLNUM = DLAMCH'S' ) / EPS
      BIGNUM = ONE / SMLNUM
      CALL DLABADSMLNUMBIGNUM )
*
*     Set up test case parameters
*
      VAL1 ) = ONE
      VAL2 ) = ONE + TWO*EPS
      VAL3 ) = TWO
      VAL4 ) = TWO - FOUR*EPS
      VM1 ) = SMLNUM
      VM2 ) = ONE
      VM3 ) = BIGNUM
*
      KNT = 0
      NINFO = 0
      LMAX = 0
      RMAX = ZERO
*
*     Begin test loop
*
      DO 150 I1 = 14
         DO 140 I2 = 14
            DO 130 I3 = 14
               DO 120 I4 = 14
                  DO 110 IM1 = 13
                     DO 100 IM2 = 13
                        DO 90 IM3 = 13
                           DO 80 IM4 = 13
                              T11 ) = VALI1 )*VMIM1 )
                              T12 ) = VALI2 )*VMIM2 )
                              T21 ) = -VALI3 )*VMIM3 )
                              T22 ) = VALI4 )*VMIM4 )
                              TNRM = MAXABST11 ) ),
     $                               ABST12 ) ), ABST21 ) ),
     $                               ABST22 ) ) )
                              T111 ) = T11 )
                              T112 ) = T12 )
                              T121 ) = T21 )
                              T122 ) = T22 )
                              Q11 ) = ONE
                              Q12 ) = ZERO
                              Q21 ) = ZERO
                              Q22 ) = ONE
*
                              CALL DLANV2T11 ), T12 ),
     $                                     T21 ), T22 ), WR1,
     $                                     WI1WR2WI2CSSN )
                              DO 10 J1 = 12
                                 RES = QJ11 )*CS + QJ12 )*SN
                                 QJ12 ) = -QJ11 )*SN +
     $                                        QJ12 )*CS
                                 QJ11 ) = RES
   10                         CONTINUE
*
                              RES = ZERO
                              RES = RES + ABSQ11 )**2+
     $                              Q12 )**2-ONE ) / EPS
                              RES = RES + ABSQ22 )**2+
     $                              Q21 )**2-ONE ) / EPS
                              RES = RES + ABSQ11 )*Q21 )+
     $                              Q12 )*Q22 ) ) / EPS
                              DO 40 J1 = 12
                                 DO 30 J2 = 12
                                    T2J1J2 ) = ZERO
                                    DO 20 J3 = 12
                                       T2J1J2 ) = T2J1J2 ) +
     $                                                T1J1J3 )*
     $                                                QJ3J2 )
   20                               CONTINUE
   30                            CONTINUE
   40                         CONTINUE
                              DO 70 J1 = 12
                                 DO 60 J2 = 12
                                    SUM = TJ1J2 )
                                    DO 50 J3 = 12
                                       SUM = SUM - QJ3J1 )*
     $                                       T2J3J2 )
   50                               CONTINUE
                                    RES = RES + ABSSUM ) / EPS / TNRM
   60                            CONTINUE
   70                         CONTINUE
                              IFT21 ).NE.ZERO .AND.
     $                            ( T11 ).NE.T2,
     $                            2 ) .OR. SIGNONET1,
     $                            2 ) )*SIGNONET2,
     $                            1 ) ).GT.ZERO ) )RES = RES + ONE / EPS
                              KNT = KNT + 1
                              IFRES.GT.RMAX ) THEN
                                 LMAX = KNT
                                 RMAX = RES
                              END IF
   80                      CONTINUE
   90                   CONTINUE
  100                CONTINUE
  110             CONTINUE
  120          CONTINUE
  130       CONTINUE
  140    CONTINUE
  150 CONTINUE
*
      RETURN
*
*     End of DGET33
*
      END