You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							148 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							148 lines
						
					
					
						
							3.6 KiB
						
					
					
				|       SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM) | |
| *     .. Scalar Arguments .. | |
|       INTEGER INCX,INCY,N | |
| *     .. | |
| *     .. Array Arguments .. | |
|       REAL SPARAM(5),SX(*),SY(*) | |
| *     .. | |
| * | |
| *  Purpose | |
| *  ======= | |
| * | |
| *     APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX | |
| * | |
| *     (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN | |
| *     (DX**T) | |
| * | |
| *     SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE | |
| *     LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY. | |
| *     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. | |
| * | |
| *     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0 | |
| * | |
| *       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0) | |
| *     H=(          )    (          )    (          )    (          ) | |
| *       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0). | |
| *     SEE  SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM. | |
| * | |
| * | |
| *  Arguments | |
| *  ========= | |
| * | |
| *  N      (input) INTEGER | |
| *         number of elements in input vector(s) | |
| * | |
| *  SX     (input/output) REAL array, dimension N | |
| *         double precision vector with N elements | |
| * | |
| *  INCX   (input) INTEGER | |
| *         storage spacing between elements of SX | |
| * | |
| *  SY     (input/output) REAL array, dimension N | |
| *         double precision vector with N elements | |
| * | |
| *  INCY   (input) INTEGER | |
| *         storage spacing between elements of SY | |
| * | |
| *  SPARAM (input/output)  REAL array, dimension 5 | |
| *     SPARAM(1)=SFLAG | |
| *     SPARAM(2)=SH11 | |
| *     SPARAM(3)=SH21 | |
| *     SPARAM(4)=SH12 | |
| *     SPARAM(5)=SH22 | |
| * | |
| *  ===================================================================== | |
| * | |
| *     .. Local Scalars .. | |
|       REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO | |
|       INTEGER I,KX,KY,NSTEPS | |
| *     .. | |
| *     .. Data statements .. | |
|       DATA ZERO,TWO/0.E0,2.E0/ | |
| *     .. | |
| * | |
|       SFLAG = SPARAM(1) | |
|       IF (N.LE.0 .OR. (SFLAG+TWO.EQ.ZERO)) GO TO 140 | |
|       IF (.NOT. (INCX.EQ.INCY.AND.INCX.GT.0)) GO TO 70 | |
| * | |
|       NSTEPS = N*INCX | |
|       IF (SFLAG) 50,10,30 | |
|    10 CONTINUE | |
|       SH12 = SPARAM(4) | |
|       SH21 = SPARAM(3) | |
|       DO 20 I = 1,NSTEPS,INCX | |
|           W = SX(I) | |
|           Z = SY(I) | |
|           SX(I) = W + Z*SH12 | |
|           SY(I) = W*SH21 + Z | |
|    20 CONTINUE | |
|       GO TO 140 | |
|    30 CONTINUE | |
|       SH11 = SPARAM(2) | |
|       SH22 = SPARAM(5) | |
|       DO 40 I = 1,NSTEPS,INCX | |
|           W = SX(I) | |
|           Z = SY(I) | |
|           SX(I) = W*SH11 + Z | |
|           SY(I) = -W + SH22*Z | |
|    40 CONTINUE | |
|       GO TO 140 | |
|    50 CONTINUE | |
|       SH11 = SPARAM(2) | |
|       SH12 = SPARAM(4) | |
|       SH21 = SPARAM(3) | |
|       SH22 = SPARAM(5) | |
|       DO 60 I = 1,NSTEPS,INCX | |
|           W = SX(I) | |
|           Z = SY(I) | |
|           SX(I) = W*SH11 + Z*SH12 | |
|           SY(I) = W*SH21 + Z*SH22 | |
|    60 CONTINUE | |
|       GO TO 140 | |
|    70 CONTINUE | |
|       KX = 1 | |
|       KY = 1 | |
|       IF (INCX.LT.0) KX = 1 + (1-N)*INCX | |
|       IF (INCY.LT.0) KY = 1 + (1-N)*INCY | |
| * | |
|       IF (SFLAG) 120,80,100 | |
|    80 CONTINUE | |
|       SH12 = SPARAM(4) | |
|       SH21 = SPARAM(3) | |
|       DO 90 I = 1,N | |
|           W = SX(KX) | |
|           Z = SY(KY) | |
|           SX(KX) = W + Z*SH12 | |
|           SY(KY) = W*SH21 + Z | |
|           KX = KX + INCX | |
|           KY = KY + INCY | |
|    90 CONTINUE | |
|       GO TO 140 | |
|   100 CONTINUE | |
|       SH11 = SPARAM(2) | |
|       SH22 = SPARAM(5) | |
|       DO 110 I = 1,N | |
|           W = SX(KX) | |
|           Z = SY(KY) | |
|           SX(KX) = W*SH11 + Z | |
|           SY(KY) = -W + SH22*Z | |
|           KX = KX + INCX | |
|           KY = KY + INCY | |
|   110 CONTINUE | |
|       GO TO 140 | |
|   120 CONTINUE | |
|       SH11 = SPARAM(2) | |
|       SH12 = SPARAM(4) | |
|       SH21 = SPARAM(3) | |
|       SH22 = SPARAM(5) | |
|       DO 130 I = 1,N | |
|           W = SX(KX) | |
|           Z = SY(KY) | |
|           SX(KX) = W*SH11 + Z*SH12 | |
|           SY(KY) = W*SH21 + Z*SH22 | |
|           KX = KX + INCX | |
|           KY = KY + INCY | |
|   130 CONTINUE | |
|   140 CONTINUE | |
|       RETURN | |
|       END
 |