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