|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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
|