107 lines
3.1 KiB
FortranFixed
107 lines
3.1 KiB
FortranFixed
|
SUBROUTINE SROTMF (N,SX,INCX,SY,INCY,SPARAM)
|
||
|
C
|
||
|
C APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
|
||
|
C
|
||
|
C (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
|
||
|
C (DX**T)
|
||
|
C
|
||
|
C SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
|
||
|
C LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY.
|
||
|
C WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
|
||
|
C
|
||
|
C SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0
|
||
|
C
|
||
|
C (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0)
|
||
|
C H=( ) ( ) ( ) ( )
|
||
|
C (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0).
|
||
|
C SEE SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
|
||
|
C
|
||
|
DIMENSION SX(1),SY(1),SPARAM(5)
|
||
|
DATA ZERO,TWO/0.E0,2.E0/
|
||
|
C
|
||
|
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
|
||
|
C
|
||
|
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
|
||
|
C
|
||
|
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
|