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.

srotm.f 5.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. *> \brief \b SROTM
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
  12. *
  13. * .. Scalar Arguments ..
  14. * INTEGER INCX,INCY,N
  15. * ..
  16. * .. Array Arguments ..
  17. * REAL SPARAM(5),SX(*),SY(*)
  18. * ..
  19. *
  20. *
  21. *> \par Purpose:
  22. * =============
  23. *>
  24. *> \verbatim
  25. *>
  26. *> APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
  27. *>
  28. *> (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
  29. *> (SX**T)
  30. *>
  31. *> SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
  32. *> LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY.
  33. *> WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
  34. *>
  35. *> SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0
  36. *>
  37. *> (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0)
  38. *> H=( ) ( ) ( ) ( )
  39. *> (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0).
  40. *> SEE SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
  41. *>
  42. *> \endverbatim
  43. *
  44. * Arguments:
  45. * ==========
  46. *
  47. *> \param[in] N
  48. *> \verbatim
  49. *> N is INTEGER
  50. *> number of elements in input vector(s)
  51. *> \endverbatim
  52. *>
  53. *> \param[in,out] SX
  54. *> \verbatim
  55. *> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
  56. *> \endverbatim
  57. *>
  58. *> \param[in] INCX
  59. *> \verbatim
  60. *> INCX is INTEGER
  61. *> storage spacing between elements of SX
  62. *> \endverbatim
  63. *>
  64. *> \param[in,out] SY
  65. *> \verbatim
  66. *> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
  67. *> \endverbatim
  68. *>
  69. *> \param[in] INCY
  70. *> \verbatim
  71. *> INCY is INTEGER
  72. *> storage spacing between elements of SY
  73. *> \endverbatim
  74. *>
  75. *> \param[in] SPARAM
  76. *> \verbatim
  77. *> SPARAM is REAL array, dimension (5)
  78. *> SPARAM(1)=SFLAG
  79. *> SPARAM(2)=SH11
  80. *> SPARAM(3)=SH21
  81. *> SPARAM(4)=SH12
  82. *> SPARAM(5)=SH22
  83. *> \endverbatim
  84. *
  85. * Authors:
  86. * ========
  87. *
  88. *> \author Univ. of Tennessee
  89. *> \author Univ. of California Berkeley
  90. *> \author Univ. of Colorado Denver
  91. *> \author NAG Ltd.
  92. *
  93. *> \date November 2017
  94. *
  95. *> \ingroup single_blas_level1
  96. *
  97. * =====================================================================
  98. SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
  99. *
  100. * -- Reference BLAS level1 routine (version 3.8.0) --
  101. * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
  102. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  103. * November 2017
  104. *
  105. * .. Scalar Arguments ..
  106. INTEGER INCX,INCY,N
  107. * ..
  108. * .. Array Arguments ..
  109. REAL SPARAM(5),SX(*),SY(*)
  110. * ..
  111. *
  112. * =====================================================================
  113. *
  114. * .. Local Scalars ..
  115. REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO
  116. INTEGER I,KX,KY,NSTEPS
  117. * ..
  118. * .. Data statements ..
  119. DATA ZERO,TWO/0.E0,2.E0/
  120. * ..
  121. *
  122. SFLAG = SPARAM(1)
  123. IF (N.LE.0 .OR. (SFLAG+TWO.EQ.ZERO)) RETURN
  124. IF (INCX.EQ.INCY.AND.INCX.GT.0) THEN
  125. *
  126. NSTEPS = N*INCX
  127. IF (SFLAG.LT.ZERO) THEN
  128. SH11 = SPARAM(2)
  129. SH12 = SPARAM(4)
  130. SH21 = SPARAM(3)
  131. SH22 = SPARAM(5)
  132. DO I = 1,NSTEPS,INCX
  133. W = SX(I)
  134. Z = SY(I)
  135. SX(I) = W*SH11 + Z*SH12
  136. SY(I) = W*SH21 + Z*SH22
  137. END DO
  138. ELSE IF (SFLAG.EQ.ZERO) THEN
  139. SH12 = SPARAM(4)
  140. SH21 = SPARAM(3)
  141. DO I = 1,NSTEPS,INCX
  142. W = SX(I)
  143. Z = SY(I)
  144. SX(I) = W + Z*SH12
  145. SY(I) = W*SH21 + Z
  146. END DO
  147. ELSE
  148. SH11 = SPARAM(2)
  149. SH22 = SPARAM(5)
  150. DO I = 1,NSTEPS,INCX
  151. W = SX(I)
  152. Z = SY(I)
  153. SX(I) = W*SH11 + Z
  154. SY(I) = -W + SH22*Z
  155. END DO
  156. END IF
  157. ELSE
  158. KX = 1
  159. KY = 1
  160. IF (INCX.LT.0) KX = 1 + (1-N)*INCX
  161. IF (INCY.LT.0) KY = 1 + (1-N)*INCY
  162. *
  163. IF (SFLAG.LT.ZERO) THEN
  164. SH11 = SPARAM(2)
  165. SH12 = SPARAM(4)
  166. SH21 = SPARAM(3)
  167. SH22 = SPARAM(5)
  168. DO I = 1,N
  169. W = SX(KX)
  170. Z = SY(KY)
  171. SX(KX) = W*SH11 + Z*SH12
  172. SY(KY) = W*SH21 + Z*SH22
  173. KX = KX + INCX
  174. KY = KY + INCY
  175. END DO
  176. ELSE IF (SFLAG.EQ.ZERO) THEN
  177. SH12 = SPARAM(4)
  178. SH21 = SPARAM(3)
  179. DO I = 1,N
  180. W = SX(KX)
  181. Z = SY(KY)
  182. SX(KX) = W + Z*SH12
  183. SY(KY) = W*SH21 + Z
  184. KX = KX + INCX
  185. KY = KY + INCY
  186. END DO
  187. ELSE
  188. SH11 = SPARAM(2)
  189. SH22 = SPARAM(5)
  190. DO I = 1,N
  191. W = SX(KX)
  192. Z = SY(KY)
  193. SX(KX) = W*SH11 + Z
  194. SY(KY) = -W + SH22*Z
  195. KX = KX + INCX
  196. KY = KY + INCY
  197. END DO
  198. END IF
  199. END IF
  200. RETURN
  201. END