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.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  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 N
  56. *> double precision vector with N elements
  57. *> \endverbatim
  58. *>
  59. *> \param[in] INCX
  60. *> \verbatim
  61. *> INCX is INTEGER
  62. *> storage spacing between elements of SX
  63. *> \endverbatim
  64. *>
  65. *> \param[in,out] SY
  66. *> \verbatim
  67. *> SY is REAL array, dimension N
  68. *> double precision vector with N elements
  69. *> \endverbatim
  70. *>
  71. *> \param[in] INCY
  72. *> \verbatim
  73. *> INCY is INTEGER
  74. *> storage spacing between elements of SY
  75. *> \endverbatim
  76. *>
  77. *> \param[in,out] SPARAM
  78. *> \verbatim
  79. *> SPARAM is REAL array, dimension 5
  80. *> SPARAM(1)=SFLAG
  81. *> SPARAM(2)=SH11
  82. *> SPARAM(3)=SH21
  83. *> SPARAM(4)=SH12
  84. *> SPARAM(5)=SH22
  85. *> \endverbatim
  86. *
  87. * Authors:
  88. * ========
  89. *
  90. *> \author Univ. of Tennessee
  91. *> \author Univ. of California Berkeley
  92. *> \author Univ. of Colorado Denver
  93. *> \author NAG Ltd.
  94. *
  95. *> \date November 2011
  96. *
  97. *> \ingroup single_blas_level1
  98. *
  99. * =====================================================================
  100. SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
  101. *
  102. * -- Reference BLAS level1 routine (version 3.4.0) --
  103. * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
  104. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  105. * November 2011
  106. *
  107. * .. Scalar Arguments ..
  108. INTEGER INCX,INCY,N
  109. * ..
  110. * .. Array Arguments ..
  111. REAL SPARAM(5),SX(*),SY(*)
  112. * ..
  113. *
  114. * =====================================================================
  115. *
  116. * .. Local Scalars ..
  117. REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO
  118. INTEGER I,KX,KY,NSTEPS
  119. * ..
  120. * .. Data statements ..
  121. DATA ZERO,TWO/0.E0,2.E0/
  122. * ..
  123. *
  124. SFLAG = SPARAM(1)
  125. IF (N.LE.0 .OR. (SFLAG+TWO.EQ.ZERO)) RETURN
  126. IF (INCX.EQ.INCY.AND.INCX.GT.0) THEN
  127. *
  128. NSTEPS = N*INCX
  129. IF (SFLAG.LT.ZERO) THEN
  130. SH11 = SPARAM(2)
  131. SH12 = SPARAM(4)
  132. SH21 = SPARAM(3)
  133. SH22 = SPARAM(5)
  134. DO I = 1,NSTEPS,INCX
  135. W = SX(I)
  136. Z = SY(I)
  137. SX(I) = W*SH11 + Z*SH12
  138. SY(I) = W*SH21 + Z*SH22
  139. END DO
  140. ELSE IF (SFLAG.EQ.ZERO) THEN
  141. SH12 = SPARAM(4)
  142. SH21 = SPARAM(3)
  143. DO I = 1,NSTEPS,INCX
  144. W = SX(I)
  145. Z = SY(I)
  146. SX(I) = W + Z*SH12
  147. SY(I) = W*SH21 + Z
  148. END DO
  149. ELSE
  150. SH11 = SPARAM(2)
  151. SH22 = SPARAM(5)
  152. DO I = 1,NSTEPS,INCX
  153. W = SX(I)
  154. Z = SY(I)
  155. SX(I) = W*SH11 + Z
  156. SY(I) = -W + SH22*Z
  157. END DO
  158. END IF
  159. ELSE
  160. KX = 1
  161. KY = 1
  162. IF (INCX.LT.0) KX = 1 + (1-N)*INCX
  163. IF (INCY.LT.0) KY = 1 + (1-N)*INCY
  164. *
  165. IF (SFLAG.LT.ZERO) THEN
  166. SH11 = SPARAM(2)
  167. SH12 = SPARAM(4)
  168. SH21 = SPARAM(3)
  169. SH22 = SPARAM(5)
  170. DO I = 1,N
  171. W = SX(KX)
  172. Z = SY(KY)
  173. SX(KX) = W*SH11 + Z*SH12
  174. SY(KY) = W*SH21 + Z*SH22
  175. KX = KX + INCX
  176. KY = KY + INCY
  177. END DO
  178. ELSE IF (SFLAG.EQ.ZERO) THEN
  179. SH12 = SPARAM(4)
  180. SH21 = SPARAM(3)
  181. DO I = 1,N
  182. W = SX(KX)
  183. Z = SY(KY)
  184. SX(KX) = W + Z*SH12
  185. SY(KY) = W*SH21 + Z
  186. KX = KX + INCX
  187. KY = KY + INCY
  188. END DO
  189. ELSE
  190. SH11 = SPARAM(2)
  191. SH22 = SPARAM(5)
  192. DO I = 1,N
  193. W = SX(KX)
  194. Z = SY(KY)
  195. SX(KX) = W*SH11 + Z
  196. SY(KY) = -W + SH22*Z
  197. KX = KX + INCX
  198. KY = KY + INCY
  199. END DO
  200. END IF
  201. END IF
  202. RETURN
  203. END