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.

clatsp.f 7.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. *> \brief \b CLATSP
  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 CLATSP( UPLO, N, X, ISEED )
  12. *
  13. * .. Scalar Arguments ..
  14. * CHARACTER UPLO
  15. * INTEGER N
  16. * ..
  17. * .. Array Arguments ..
  18. * INTEGER ISEED( * )
  19. * COMPLEX X( * )
  20. * ..
  21. *
  22. *
  23. *> \par Purpose:
  24. * =============
  25. *>
  26. *> \verbatim
  27. *>
  28. *> CLATSP generates a special test matrix for the complex symmetric
  29. *> (indefinite) factorization for packed matrices. The pivot blocks of
  30. *> the generated matrix will be in the following order:
  31. *> 2x2 pivot block, non diagonalizable
  32. *> 1x1 pivot block
  33. *> 2x2 pivot block, diagonalizable
  34. *> (cycle repeats)
  35. *> A row interchange is required for each non-diagonalizable 2x2 block.
  36. *> \endverbatim
  37. *
  38. * Arguments:
  39. * ==========
  40. *
  41. *> \param[in] UPLO
  42. *> \verbatim
  43. *> UPLO is CHARACTER
  44. *> Specifies whether the generated matrix is to be upper or
  45. *> lower triangular.
  46. *> = 'U': Upper triangular
  47. *> = 'L': Lower triangular
  48. *> \endverbatim
  49. *>
  50. *> \param[in] N
  51. *> \verbatim
  52. *> N is INTEGER
  53. *> The dimension of the matrix to be generated.
  54. *> \endverbatim
  55. *>
  56. *> \param[out] X
  57. *> \verbatim
  58. *> X is COMPLEX array, dimension (N*(N+1)/2)
  59. *> The generated matrix in packed storage format. The matrix
  60. *> consists of 3x3 and 2x2 diagonal blocks which result in the
  61. *> pivot sequence given above. The matrix outside these
  62. *> diagonal blocks is zero.
  63. *> \endverbatim
  64. *>
  65. *> \param[in,out] ISEED
  66. *> \verbatim
  67. *> ISEED is INTEGER array, dimension (4)
  68. *> On entry, the seed for the random number generator. The last
  69. *> of the four integers must be odd. (modified on exit)
  70. *> \endverbatim
  71. *
  72. * Authors:
  73. * ========
  74. *
  75. *> \author Univ. of Tennessee
  76. *> \author Univ. of California Berkeley
  77. *> \author Univ. of Colorado Denver
  78. *> \author NAG Ltd.
  79. *
  80. *> \date December 2016
  81. *
  82. *> \ingroup complex_lin
  83. *
  84. * =====================================================================
  85. SUBROUTINE CLATSP( UPLO, N, X, ISEED )
  86. *
  87. * -- LAPACK test routine (version 3.7.0) --
  88. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  89. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  90. * December 2016
  91. *
  92. * .. Scalar Arguments ..
  93. CHARACTER UPLO
  94. INTEGER N
  95. * ..
  96. * .. Array Arguments ..
  97. INTEGER ISEED( * )
  98. COMPLEX X( * )
  99. * ..
  100. *
  101. * =====================================================================
  102. *
  103. * .. Parameters ..
  104. COMPLEX EYE
  105. PARAMETER ( EYE = ( 0.0, 1.0 ) )
  106. * ..
  107. * .. Local Scalars ..
  108. INTEGER J, JJ, N5
  109. REAL ALPHA, ALPHA3, BETA
  110. COMPLEX A, B, C, R
  111. * ..
  112. * .. External Functions ..
  113. COMPLEX CLARND
  114. EXTERNAL CLARND
  115. * ..
  116. * .. Intrinsic Functions ..
  117. INTRINSIC ABS, SQRT
  118. * ..
  119. * .. Executable Statements ..
  120. *
  121. * Initialize constants
  122. *
  123. ALPHA = ( 1.+SQRT( 17. ) ) / 8.
  124. BETA = ALPHA - 1. / 1000.
  125. ALPHA3 = ALPHA*ALPHA*ALPHA
  126. *
  127. * Fill the matrix with zeros.
  128. *
  129. DO 10 J = 1, N*( N+1 ) / 2
  130. X( J ) = 0.0
  131. 10 CONTINUE
  132. *
  133. * UPLO = 'U': Upper triangular storage
  134. *
  135. IF( UPLO.EQ.'U' ) THEN
  136. N5 = N / 5
  137. N5 = N - 5*N5 + 1
  138. *
  139. JJ = N*( N+1 ) / 2
  140. DO 20 J = N, N5, -5
  141. A = ALPHA3*CLARND( 5, ISEED )
  142. B = CLARND( 5, ISEED ) / ALPHA
  143. C = A - 2.*B*EYE
  144. R = C / BETA
  145. X( JJ ) = A
  146. X( JJ-2 ) = B
  147. JJ = JJ - J
  148. X( JJ ) = CLARND( 2, ISEED )
  149. X( JJ-1 ) = R
  150. JJ = JJ - ( J-1 )
  151. X( JJ ) = C
  152. JJ = JJ - ( J-2 )
  153. X( JJ ) = CLARND( 2, ISEED )
  154. JJ = JJ - ( J-3 )
  155. X( JJ ) = CLARND( 2, ISEED )
  156. IF( ABS( X( JJ+( J-3 ) ) ).GT.ABS( X( JJ ) ) ) THEN
  157. X( JJ+( J-4 ) ) = 2.0*X( JJ+( J-3 ) )
  158. ELSE
  159. X( JJ+( J-4 ) ) = 2.0*X( JJ )
  160. END IF
  161. JJ = JJ - ( J-4 )
  162. 20 CONTINUE
  163. *
  164. * Clean-up for N not a multiple of 5.
  165. *
  166. J = N5 - 1
  167. IF( J.GT.2 ) THEN
  168. A = ALPHA3*CLARND( 5, ISEED )
  169. B = CLARND( 5, ISEED ) / ALPHA
  170. C = A - 2.*B*EYE
  171. R = C / BETA
  172. X( JJ ) = A
  173. X( JJ-2 ) = B
  174. JJ = JJ - J
  175. X( JJ ) = CLARND( 2, ISEED )
  176. X( JJ-1 ) = R
  177. JJ = JJ - ( J-1 )
  178. X( JJ ) = C
  179. JJ = JJ - ( J-2 )
  180. J = J - 3
  181. END IF
  182. IF( J.GT.1 ) THEN
  183. X( JJ ) = CLARND( 2, ISEED )
  184. X( JJ-J ) = CLARND( 2, ISEED )
  185. IF( ABS( X( JJ ) ).GT.ABS( X( JJ-J ) ) ) THEN
  186. X( JJ-1 ) = 2.0*X( JJ )
  187. ELSE
  188. X( JJ-1 ) = 2.0*X( JJ-J )
  189. END IF
  190. JJ = JJ - J - ( J-1 )
  191. J = J - 2
  192. ELSE IF( J.EQ.1 ) THEN
  193. X( JJ ) = CLARND( 2, ISEED )
  194. J = J - 1
  195. END IF
  196. *
  197. * UPLO = 'L': Lower triangular storage
  198. *
  199. ELSE
  200. N5 = N / 5
  201. N5 = N5*5
  202. *
  203. JJ = 1
  204. DO 30 J = 1, N5, 5
  205. A = ALPHA3*CLARND( 5, ISEED )
  206. B = CLARND( 5, ISEED ) / ALPHA
  207. C = A - 2.*B*EYE
  208. R = C / BETA
  209. X( JJ ) = A
  210. X( JJ+2 ) = B
  211. JJ = JJ + ( N-J+1 )
  212. X( JJ ) = CLARND( 2, ISEED )
  213. X( JJ+1 ) = R
  214. JJ = JJ + ( N-J )
  215. X( JJ ) = C
  216. JJ = JJ + ( N-J-1 )
  217. X( JJ ) = CLARND( 2, ISEED )
  218. JJ = JJ + ( N-J-2 )
  219. X( JJ ) = CLARND( 2, ISEED )
  220. IF( ABS( X( JJ-( N-J-2 ) ) ).GT.ABS( X( JJ ) ) ) THEN
  221. X( JJ-( N-J-2 )+1 ) = 2.0*X( JJ-( N-J-2 ) )
  222. ELSE
  223. X( JJ-( N-J-2 )+1 ) = 2.0*X( JJ )
  224. END IF
  225. JJ = JJ + ( N-J-3 )
  226. 30 CONTINUE
  227. *
  228. * Clean-up for N not a multiple of 5.
  229. *
  230. J = N5 + 1
  231. IF( J.LT.N-1 ) THEN
  232. A = ALPHA3*CLARND( 5, ISEED )
  233. B = CLARND( 5, ISEED ) / ALPHA
  234. C = A - 2.*B*EYE
  235. R = C / BETA
  236. X( JJ ) = A
  237. X( JJ+2 ) = B
  238. JJ = JJ + ( N-J+1 )
  239. X( JJ ) = CLARND( 2, ISEED )
  240. X( JJ+1 ) = R
  241. JJ = JJ + ( N-J )
  242. X( JJ ) = C
  243. JJ = JJ + ( N-J-1 )
  244. J = J + 3
  245. END IF
  246. IF( J.LT.N ) THEN
  247. X( JJ ) = CLARND( 2, ISEED )
  248. X( JJ+( N-J+1 ) ) = CLARND( 2, ISEED )
  249. IF( ABS( X( JJ ) ).GT.ABS( X( JJ+( N-J+1 ) ) ) ) THEN
  250. X( JJ+1 ) = 2.0*X( JJ )
  251. ELSE
  252. X( JJ+1 ) = 2.0*X( JJ+( N-J+1 ) )
  253. END IF
  254. JJ = JJ + ( N-J+1 ) + ( N-J )
  255. J = J + 2
  256. ELSE IF( J.EQ.N ) THEN
  257. X( JJ ) = CLARND( 2, ISEED )
  258. JJ = JJ + ( N-J+1 )
  259. J = J + 1
  260. END IF
  261. END IF
  262. *
  263. RETURN
  264. *
  265. * End of CLATSP
  266. *
  267. END