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.

claptm.f 7.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. *> \brief \b CLAPTM
  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 CLAPTM( UPLO, N, NRHS, ALPHA, D, E, X, LDX, BETA, B,
  12. * LDB )
  13. *
  14. * .. Scalar Arguments ..
  15. * CHARACTER UPLO
  16. * INTEGER LDB, LDX, N, NRHS
  17. * REAL ALPHA, BETA
  18. * ..
  19. * .. Array Arguments ..
  20. * REAL D( * )
  21. * COMPLEX B( LDB, * ), E( * ), X( LDX, * )
  22. * ..
  23. *
  24. *
  25. *> \par Purpose:
  26. * =============
  27. *>
  28. *> \verbatim
  29. *>
  30. *> CLAPTM multiplies an N by NRHS matrix X by a Hermitian tridiagonal
  31. *> matrix A and stores the result in a matrix B. The operation has the
  32. *> form
  33. *>
  34. *> B := alpha * A * X + beta * B
  35. *>
  36. *> where alpha may be either 1. or -1. and beta may be 0., 1., or -1.
  37. *> \endverbatim
  38. *
  39. * Arguments:
  40. * ==========
  41. *
  42. *> \param[in] UPLO
  43. *> \verbatim
  44. *> UPLO is CHARACTER
  45. *> Specifies whether the superdiagonal or the subdiagonal of the
  46. *> tridiagonal matrix A is stored.
  47. *> = 'U': Upper, E is the superdiagonal of A.
  48. *> = 'L': Lower, E is the subdiagonal of A.
  49. *> \endverbatim
  50. *>
  51. *> \param[in] N
  52. *> \verbatim
  53. *> N is INTEGER
  54. *> The order of the matrix A. N >= 0.
  55. *> \endverbatim
  56. *>
  57. *> \param[in] NRHS
  58. *> \verbatim
  59. *> NRHS is INTEGER
  60. *> The number of right hand sides, i.e., the number of columns
  61. *> of the matrices X and B.
  62. *> \endverbatim
  63. *>
  64. *> \param[in] ALPHA
  65. *> \verbatim
  66. *> ALPHA is REAL
  67. *> The scalar alpha. ALPHA must be 1. or -1.; otherwise,
  68. *> it is assumed to be 0.
  69. *> \endverbatim
  70. *>
  71. *> \param[in] D
  72. *> \verbatim
  73. *> D is REAL array, dimension (N)
  74. *> The n diagonal elements of the tridiagonal matrix A.
  75. *> \endverbatim
  76. *>
  77. *> \param[in] E
  78. *> \verbatim
  79. *> E is COMPLEX array, dimension (N-1)
  80. *> The (n-1) subdiagonal or superdiagonal elements of A.
  81. *> \endverbatim
  82. *>
  83. *> \param[in] X
  84. *> \verbatim
  85. *> X is COMPLEX array, dimension (LDX,NRHS)
  86. *> The N by NRHS matrix X.
  87. *> \endverbatim
  88. *>
  89. *> \param[in] LDX
  90. *> \verbatim
  91. *> LDX is INTEGER
  92. *> The leading dimension of the array X. LDX >= max(N,1).
  93. *> \endverbatim
  94. *>
  95. *> \param[in] BETA
  96. *> \verbatim
  97. *> BETA is REAL
  98. *> The scalar beta. BETA must be 0., 1., or -1.; otherwise,
  99. *> it is assumed to be 1.
  100. *> \endverbatim
  101. *>
  102. *> \param[in,out] B
  103. *> \verbatim
  104. *> B is COMPLEX array, dimension (LDB,NRHS)
  105. *> On entry, the N by NRHS matrix B.
  106. *> On exit, B is overwritten by the matrix expression
  107. *> B := alpha * A * X + beta * B.
  108. *> \endverbatim
  109. *>
  110. *> \param[in] LDB
  111. *> \verbatim
  112. *> LDB is INTEGER
  113. *> The leading dimension of the array B. LDB >= max(N,1).
  114. *> \endverbatim
  115. *
  116. * Authors:
  117. * ========
  118. *
  119. *> \author Univ. of Tennessee
  120. *> \author Univ. of California Berkeley
  121. *> \author Univ. of Colorado Denver
  122. *> \author NAG Ltd.
  123. *
  124. *> \ingroup complex_lin
  125. *
  126. * =====================================================================
  127. SUBROUTINE CLAPTM( UPLO, N, NRHS, ALPHA, D, E, X, LDX, BETA, B,
  128. $ LDB )
  129. *
  130. * -- LAPACK test routine --
  131. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  132. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  133. *
  134. * .. Scalar Arguments ..
  135. CHARACTER UPLO
  136. INTEGER LDB, LDX, N, NRHS
  137. REAL ALPHA, BETA
  138. * ..
  139. * .. Array Arguments ..
  140. REAL D( * )
  141. COMPLEX B( LDB, * ), E( * ), X( LDX, * )
  142. * ..
  143. *
  144. * =====================================================================
  145. *
  146. * .. Parameters ..
  147. REAL ONE, ZERO
  148. PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
  149. * ..
  150. * .. Local Scalars ..
  151. INTEGER I, J
  152. * ..
  153. * .. External Functions ..
  154. LOGICAL LSAME
  155. EXTERNAL LSAME
  156. * ..
  157. * .. Intrinsic Functions ..
  158. INTRINSIC CONJG
  159. * ..
  160. * .. Executable Statements ..
  161. *
  162. IF( N.EQ.0 )
  163. $ RETURN
  164. *
  165. IF( BETA.EQ.ZERO ) THEN
  166. DO 20 J = 1, NRHS
  167. DO 10 I = 1, N
  168. B( I, J ) = ZERO
  169. 10 CONTINUE
  170. 20 CONTINUE
  171. ELSE IF( BETA.EQ.-ONE ) THEN
  172. DO 40 J = 1, NRHS
  173. DO 30 I = 1, N
  174. B( I, J ) = -B( I, J )
  175. 30 CONTINUE
  176. 40 CONTINUE
  177. END IF
  178. *
  179. IF( ALPHA.EQ.ONE ) THEN
  180. IF( LSAME( UPLO, 'U' ) ) THEN
  181. *
  182. * Compute B := B + A*X, where E is the superdiagonal of A.
  183. *
  184. DO 60 J = 1, NRHS
  185. IF( N.EQ.1 ) THEN
  186. B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J )
  187. ELSE
  188. B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J ) +
  189. $ E( 1 )*X( 2, J )
  190. B( N, J ) = B( N, J ) + CONJG( E( N-1 ) )*
  191. $ X( N-1, J ) + D( N )*X( N, J )
  192. DO 50 I = 2, N - 1
  193. B( I, J ) = B( I, J ) + CONJG( E( I-1 ) )*
  194. $ X( I-1, J ) + D( I )*X( I, J ) +
  195. $ E( I )*X( I+1, J )
  196. 50 CONTINUE
  197. END IF
  198. 60 CONTINUE
  199. ELSE
  200. *
  201. * Compute B := B + A*X, where E is the subdiagonal of A.
  202. *
  203. DO 80 J = 1, NRHS
  204. IF( N.EQ.1 ) THEN
  205. B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J )
  206. ELSE
  207. B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J ) +
  208. $ CONJG( E( 1 ) )*X( 2, J )
  209. B( N, J ) = B( N, J ) + E( N-1 )*X( N-1, J ) +
  210. $ D( N )*X( N, J )
  211. DO 70 I = 2, N - 1
  212. B( I, J ) = B( I, J ) + E( I-1 )*X( I-1, J ) +
  213. $ D( I )*X( I, J ) +
  214. $ CONJG( E( I ) )*X( I+1, J )
  215. 70 CONTINUE
  216. END IF
  217. 80 CONTINUE
  218. END IF
  219. ELSE IF( ALPHA.EQ.-ONE ) THEN
  220. IF( LSAME( UPLO, 'U' ) ) THEN
  221. *
  222. * Compute B := B - A*X, where E is the superdiagonal of A.
  223. *
  224. DO 100 J = 1, NRHS
  225. IF( N.EQ.1 ) THEN
  226. B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J )
  227. ELSE
  228. B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J ) -
  229. $ E( 1 )*X( 2, J )
  230. B( N, J ) = B( N, J ) - CONJG( E( N-1 ) )*
  231. $ X( N-1, J ) - D( N )*X( N, J )
  232. DO 90 I = 2, N - 1
  233. B( I, J ) = B( I, J ) - CONJG( E( I-1 ) )*
  234. $ X( I-1, J ) - D( I )*X( I, J ) -
  235. $ E( I )*X( I+1, J )
  236. 90 CONTINUE
  237. END IF
  238. 100 CONTINUE
  239. ELSE
  240. *
  241. * Compute B := B - A*X, where E is the subdiagonal of A.
  242. *
  243. DO 120 J = 1, NRHS
  244. IF( N.EQ.1 ) THEN
  245. B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J )
  246. ELSE
  247. B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J ) -
  248. $ CONJG( E( 1 ) )*X( 2, J )
  249. B( N, J ) = B( N, J ) - E( N-1 )*X( N-1, J ) -
  250. $ D( N )*X( N, J )
  251. DO 110 I = 2, N - 1
  252. B( I, J ) = B( I, J ) - E( I-1 )*X( I-1, J ) -
  253. $ D( I )*X( I, J ) -
  254. $ CONJG( E( I ) )*X( I+1, J )
  255. 110 CONTINUE
  256. END IF
  257. 120 CONTINUE
  258. END IF
  259. END IF
  260. RETURN
  261. *
  262. * End of CLAPTM
  263. *
  264. END