srotm.f 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. *DECK SROTM
  2. SUBROUTINE SROTM (N, SX, INCX, SY, INCY, SPARAM)
  3. C***BEGIN PROLOGUE SROTM
  4. C***PURPOSE Apply a modified Givens transformation.
  5. C***LIBRARY SLATEC (BLAS)
  6. C***CATEGORY D1A8
  7. C***TYPE SINGLE PRECISION (SROTM-S, DROTM-D)
  8. C***KEYWORDS BLAS, LINEAR ALGEBRA, MODIFIED GIVENS ROTATION, VECTOR
  9. C***AUTHOR Lawson, C. L., (JPL)
  10. C Hanson, R. J., (SNLA)
  11. C Kincaid, D. R., (U. of Texas)
  12. C Krogh, F. T., (JPL)
  13. C***DESCRIPTION
  14. C
  15. C B L A S Subprogram
  16. C Description of Parameters
  17. C
  18. C --Input--
  19. C N number of elements in input vector(s)
  20. C SX single precision vector with N elements
  21. C INCX storage spacing between elements of SX
  22. C SY single precision vector with N elements
  23. C INCY storage spacing between elements of SY
  24. C SPARAM 5-element vector. SPARAM(1) is SFLAG described below.
  25. C Locations 2-5 of SPARAM contain elements of the
  26. C transformation matrix H described below.
  27. C
  28. C --Output--
  29. C SX rotated vector (unchanged if N .LE. 0)
  30. C SY rotated vector (unchanged if N .LE. 0)
  31. C
  32. C Apply the modified Givens transformation, H, to the 2 by N matrix
  33. C (SX**T)
  34. C (SY**T) , where **T indicates transpose. The elements of SX are
  35. C in SX(LX+I*INCX), I = 0 to N-1, where LX = 1 if INCX .GE. 0, else
  36. C LX = 1+(1-N)*INCX, and similarly for SY using LY and INCY.
  37. C
  38. C With SPARAM(1)=SFLAG, H has one of the following forms:
  39. C
  40. C SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0
  41. C
  42. C (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0)
  43. C H=( ) ( ) ( ) ( )
  44. C (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0).
  45. C
  46. C See SROTMG for a description of data storage in SPARAM.
  47. C
  48. C***REFERENCES C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T.
  49. C Krogh, Basic linear algebra subprograms for Fortran
  50. C usage, Algorithm No. 539, Transactions on Mathematical
  51. C Software 5, 3 (September 1979), pp. 308-323.
  52. C***ROUTINES CALLED (NONE)
  53. C***REVISION HISTORY (YYMMDD)
  54. C 791001 DATE WRITTEN
  55. C 861211 REVISION DATE from Version 3.2
  56. C 891214 Prologue converted to Version 4.0 format. (BAB)
  57. C 920310 Corrected definition of LX in DESCRIPTION. (WRB)
  58. C 920501 Reformatted the REFERENCES section. (WRB)
  59. C***END PROLOGUE SROTM
  60. DIMENSION SX(*), SY(*), SPARAM(5)
  61. SAVE ZERO, TWO
  62. DATA ZERO, TWO /0.0E0, 2.0E0/
  63. C***FIRST EXECUTABLE STATEMENT SROTM
  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. C
  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. C
  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