Home | History | Annotate | Download | only in blas
      1       SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
      2 *     .. Scalar Arguments ..
      3       INTEGER INCX,INCY,N
      4 *     ..
      5 *     .. Array Arguments ..
      6       REAL SPARAM(5),SX(*),SY(*)
      7 *     ..
      8 *
      9 *  Purpose
     10 *  =======
     11 *
     12 *     APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
     13 *
     14 *     (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
     15 *     (DX**T)
     16 *
     17 *     SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
     18 *     LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY.
     19 *     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
     20 *
     21 *     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0
     22 *
     23 *       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0)
     24 *     H=(          )    (          )    (          )    (          )
     25 *       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0).
     26 *     SEE  SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
     27 *
     28 *
     29 *  Arguments
     30 *  =========
     31 *
     32 *  N      (input) INTEGER
     33 *         number of elements in input vector(s)
     34 *
     35 *  SX     (input/output) REAL array, dimension N
     36 *         double precision vector with N elements
     37 *
     38 *  INCX   (input) INTEGER
     39 *         storage spacing between elements of SX
     40 *
     41 *  SY     (input/output) REAL array, dimension N
     42 *         double precision vector with N elements
     43 *
     44 *  INCY   (input) INTEGER
     45 *         storage spacing between elements of SY
     46 *
     47 *  SPARAM (input/output)  REAL array, dimension 5
     48 *     SPARAM(1)=SFLAG
     49 *     SPARAM(2)=SH11
     50 *     SPARAM(3)=SH21
     51 *     SPARAM(4)=SH12
     52 *     SPARAM(5)=SH22
     53 *
     54 *  =====================================================================
     55 *
     56 *     .. Local Scalars ..
     57       REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO
     58       INTEGER I,KX,KY,NSTEPS
     59 *     ..
     60 *     .. Data statements ..
     61       DATA ZERO,TWO/0.E0,2.E0/
     62 *     ..
     63 *
     64       SFLAG = SPARAM(1)
     65       IF (N.LE.0 .OR. (SFLAG+TWO.EQ.ZERO)) GO TO 140
     66       IF (.NOT. (INCX.EQ.INCY.AND.INCX.GT.0)) GO TO 70
     67 *
     68       NSTEPS = N*INCX
     69       IF (SFLAG) 50,10,30
     70    10 CONTINUE
     71       SH12 = SPARAM(4)
     72       SH21 = SPARAM(3)
     73       DO 20 I = 1,NSTEPS,INCX
     74           W = SX(I)
     75           Z = SY(I)
     76           SX(I) = W + Z*SH12
     77           SY(I) = W*SH21 + Z
     78    20 CONTINUE
     79       GO TO 140
     80    30 CONTINUE
     81       SH11 = SPARAM(2)
     82       SH22 = SPARAM(5)
     83       DO 40 I = 1,NSTEPS,INCX
     84           W = SX(I)
     85           Z = SY(I)
     86           SX(I) = W*SH11 + Z
     87           SY(I) = -W + SH22*Z
     88    40 CONTINUE
     89       GO TO 140
     90    50 CONTINUE
     91       SH11 = SPARAM(2)
     92       SH12 = SPARAM(4)
     93       SH21 = SPARAM(3)
     94       SH22 = SPARAM(5)
     95       DO 60 I = 1,NSTEPS,INCX
     96           W = SX(I)
     97           Z = SY(I)
     98           SX(I) = W*SH11 + Z*SH12
     99           SY(I) = W*SH21 + Z*SH22
    100    60 CONTINUE
    101       GO TO 140
    102    70 CONTINUE
    103       KX = 1
    104       KY = 1
    105       IF (INCX.LT.0) KX = 1 + (1-N)*INCX
    106       IF (INCY.LT.0) KY = 1 + (1-N)*INCY
    107 *
    108       IF (SFLAG) 120,80,100
    109    80 CONTINUE
    110       SH12 = SPARAM(4)
    111       SH21 = SPARAM(3)
    112       DO 90 I = 1,N
    113           W = SX(KX)
    114           Z = SY(KY)
    115           SX(KX) = W + Z*SH12
    116           SY(KY) = W*SH21 + Z
    117           KX = KX + INCX
    118           KY = KY + INCY
    119    90 CONTINUE
    120       GO TO 140
    121   100 CONTINUE
    122       SH11 = SPARAM(2)
    123       SH22 = SPARAM(5)
    124       DO 110 I = 1,N
    125           W = SX(KX)
    126           Z = SY(KY)
    127           SX(KX) = W*SH11 + Z
    128           SY(KY) = -W + SH22*Z
    129           KX = KX + INCX
    130           KY = KY + INCY
    131   110 CONTINUE
    132       GO TO 140
    133   120 CONTINUE
    134       SH11 = SPARAM(2)
    135       SH12 = SPARAM(4)
    136       SH21 = SPARAM(3)
    137       SH22 = SPARAM(5)
    138       DO 130 I = 1,N
    139           W = SX(KX)
    140           Z = SY(KY)
    141           SX(KX) = W*SH11 + Z*SH12
    142           SY(KY) = W*SH21 + Z*SH22
    143           KX = KX + INCX
    144           KY = KY + INCY
    145   130 CONTINUE
    146   140 CONTINUE
    147       RETURN
    148       END
    149