You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

srotmf.f 3.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. SUBROUTINE SROTMF (N,SX,INCX,SY,INCY,SPARAM)
  2. C
  3. C APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
  4. C
  5. C (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
  6. C (DX**T)
  7. C
  8. C SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
  9. C LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY.
  10. C WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
  11. C
  12. C SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0
  13. C
  14. C (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0)
  15. C H=( ) ( ) ( ) ( )
  16. C (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0).
  17. C SEE SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
  18. C
  19. DIMENSION SX(1),SY(1),SPARAM(5)
  20. DATA ZERO,TWO/0.E0,2.E0/
  21. C
  22. SFLAG=SPARAM(1)
  23. IF(N .LE. 0 .OR.(SFLAG+TWO.EQ.ZERO)) GO TO 140
  24. IF(.NOT.(INCX.EQ.INCY.AND. INCX .GT.0)) GO TO 70
  25. C
  26. NSTEPS=N*INCX
  27. IF(SFLAG) 50,10,30
  28. 10 CONTINUE
  29. SH12=SPARAM(4)
  30. SH21=SPARAM(3)
  31. DO 20 I=1,NSTEPS,INCX
  32. W=SX(I)
  33. Z=SY(I)
  34. SX(I)=W+Z*SH12
  35. SY(I)=W*SH21+Z
  36. 20 CONTINUE
  37. GO TO 140
  38. 30 CONTINUE
  39. SH11=SPARAM(2)
  40. SH22=SPARAM(5)
  41. DO 40 I=1,NSTEPS,INCX
  42. W=SX(I)
  43. Z=SY(I)
  44. SX(I)=W*SH11+Z
  45. SY(I)=-W+SH22*Z
  46. 40 CONTINUE
  47. GO TO 140
  48. 50 CONTINUE
  49. SH11=SPARAM(2)
  50. SH12=SPARAM(4)
  51. SH21=SPARAM(3)
  52. SH22=SPARAM(5)
  53. DO 60 I=1,NSTEPS,INCX
  54. W=SX(I)
  55. Z=SY(I)
  56. SX(I)=W*SH11+Z*SH12
  57. SY(I)=W*SH21+Z*SH22
  58. 60 CONTINUE
  59. GO TO 140
  60. 70 CONTINUE
  61. KX=1
  62. KY=1
  63. IF(INCX .LT. 0) KX=1+(1-N)*INCX
  64. IF(INCY .LT. 0) KY=1+(1-N)*INCY
  65. C
  66. IF(SFLAG)120,80,100
  67. 80 CONTINUE
  68. SH12=SPARAM(4)
  69. SH21=SPARAM(3)
  70. DO 90 I=1,N
  71. W=SX(KX)
  72. Z=SY(KY)
  73. SX(KX)=W+Z*SH12
  74. SY(KY)=W*SH21+Z
  75. KX=KX+INCX
  76. KY=KY+INCY
  77. 90 CONTINUE
  78. GO TO 140
  79. 100 CONTINUE
  80. SH11=SPARAM(2)
  81. SH22=SPARAM(5)
  82. DO 110 I=1,N
  83. W=SX(KX)
  84. Z=SY(KY)
  85. SX(KX)=W*SH11+Z
  86. SY(KY)=-W+SH22*Z
  87. KX=KX+INCX
  88. KY=KY+INCY
  89. 110 CONTINUE
  90. GO TO 140
  91. 120 CONTINUE
  92. SH11=SPARAM(2)
  93. SH12=SPARAM(4)
  94. SH21=SPARAM(3)
  95. SH22=SPARAM(5)
  96. DO 130 I=1,N
  97. W=SX(KX)
  98. Z=SY(KY)
  99. SX(KX)=W*SH11+Z*SH12
  100. SY(KY)=W*SH21+Z*SH22
  101. KX=KX+INCX
  102. KY=KY+INCY
  103. 130 CONTINUE
  104. 140 CONTINUE
  105. RETURN
  106. END