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.

clarfx.f 21 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. *> \brief \b CLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the reflector has order ≤ 10.
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. *> \htmlonly
  9. *> Download CLARFX + dependencies
  10. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clarfx.f">
  11. *> [TGZ]</a>
  12. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clarfx.f">
  13. *> [ZIP]</a>
  14. *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfx.f">
  15. *> [TXT]</a>
  16. *> \endhtmlonly
  17. *
  18. * Definition:
  19. * ===========
  20. *
  21. * SUBROUTINE CLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
  22. *
  23. * .. Scalar Arguments ..
  24. * CHARACTER SIDE
  25. * INTEGER LDC, M, N
  26. * COMPLEX TAU
  27. * ..
  28. * .. Array Arguments ..
  29. * COMPLEX C( LDC, * ), V( * ), WORK( * )
  30. * ..
  31. *
  32. *
  33. *> \par Purpose:
  34. * =============
  35. *>
  36. *> \verbatim
  37. *>
  38. *> CLARFX applies a complex elementary reflector H to a complex m by n
  39. *> matrix C, from either the left or the right. H is represented in the
  40. *> form
  41. *>
  42. *> H = I - tau * v * v**H
  43. *>
  44. *> where tau is a complex scalar and v is a complex vector.
  45. *>
  46. *> If tau = 0, then H is taken to be the unit matrix
  47. *>
  48. *> This version uses inline code if H has order < 11.
  49. *> \endverbatim
  50. *
  51. * Arguments:
  52. * ==========
  53. *
  54. *> \param[in] SIDE
  55. *> \verbatim
  56. *> SIDE is CHARACTER*1
  57. *> = 'L': form H * C
  58. *> = 'R': form C * H
  59. *> \endverbatim
  60. *>
  61. *> \param[in] M
  62. *> \verbatim
  63. *> M is INTEGER
  64. *> The number of rows of the matrix C.
  65. *> \endverbatim
  66. *>
  67. *> \param[in] N
  68. *> \verbatim
  69. *> N is INTEGER
  70. *> The number of columns of the matrix C.
  71. *> \endverbatim
  72. *>
  73. *> \param[in] V
  74. *> \verbatim
  75. *> V is COMPLEX array, dimension (M) if SIDE = 'L'
  76. *> or (N) if SIDE = 'R'
  77. *> The vector v in the representation of H.
  78. *> \endverbatim
  79. *>
  80. *> \param[in] TAU
  81. *> \verbatim
  82. *> TAU is COMPLEX
  83. *> The value tau in the representation of H.
  84. *> \endverbatim
  85. *>
  86. *> \param[in,out] C
  87. *> \verbatim
  88. *> C is COMPLEX array, dimension (LDC,N)
  89. *> On entry, the m by n matrix C.
  90. *> On exit, C is overwritten by the matrix H * C if SIDE = 'L',
  91. *> or C * H if SIDE = 'R'.
  92. *> \endverbatim
  93. *>
  94. *> \param[in] LDC
  95. *> \verbatim
  96. *> LDC is INTEGER
  97. *> The leading dimension of the array C. LDC >= max(1,M).
  98. *> \endverbatim
  99. *>
  100. *> \param[out] WORK
  101. *> \verbatim
  102. *> WORK is COMPLEX array, dimension (N) if SIDE = 'L'
  103. *> or (M) if SIDE = 'R'
  104. *> WORK is not referenced if H has order < 11.
  105. *> \endverbatim
  106. *
  107. * Authors:
  108. * ========
  109. *
  110. *> \author Univ. of Tennessee
  111. *> \author Univ. of California Berkeley
  112. *> \author Univ. of Colorado Denver
  113. *> \author NAG Ltd.
  114. *
  115. *> \ingroup complexOTHERauxiliary
  116. *
  117. * =====================================================================
  118. SUBROUTINE CLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
  119. *
  120. * -- LAPACK auxiliary routine --
  121. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  122. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  123. *
  124. * .. Scalar Arguments ..
  125. CHARACTER SIDE
  126. INTEGER LDC, M, N
  127. COMPLEX TAU
  128. * ..
  129. * .. Array Arguments ..
  130. COMPLEX C( LDC, * ), V( * ), WORK( * )
  131. * ..
  132. *
  133. * =====================================================================
  134. *
  135. * .. Parameters ..
  136. COMPLEX ZERO, ONE
  137. PARAMETER ( ZERO = ( 0.0E+0, 0.0E+0 ),
  138. $ ONE = ( 1.0E+0, 0.0E+0 ) )
  139. * ..
  140. * .. Local Scalars ..
  141. INTEGER J
  142. COMPLEX SUM, T1, T10, T2, T3, T4, T5, T6, T7, T8, T9,
  143. $ V1, V10, V2, V3, V4, V5, V6, V7, V8, V9
  144. * ..
  145. * .. External Functions ..
  146. LOGICAL LSAME
  147. EXTERNAL LSAME
  148. * ..
  149. * .. External Subroutines ..
  150. EXTERNAL CLARF
  151. * ..
  152. * .. Intrinsic Functions ..
  153. INTRINSIC CONJG
  154. * ..
  155. * .. Executable Statements ..
  156. *
  157. IF( TAU.EQ.ZERO )
  158. $ RETURN
  159. IF( LSAME( SIDE, 'L' ) ) THEN
  160. *
  161. * Form H * C, where H has order m.
  162. *
  163. GO TO ( 10, 30, 50, 70, 90, 110, 130, 150,
  164. $ 170, 190 )M
  165. *
  166. * Code for general M
  167. *
  168. CALL CLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK )
  169. GO TO 410
  170. 10 CONTINUE
  171. *
  172. * Special code for 1 x 1 Householder
  173. *
  174. T1 = ONE - TAU*V( 1 )*CONJG( V( 1 ) )
  175. DO 20 J = 1, N
  176. C( 1, J ) = T1*C( 1, J )
  177. 20 CONTINUE
  178. GO TO 410
  179. 30 CONTINUE
  180. *
  181. * Special code for 2 x 2 Householder
  182. *
  183. V1 = CONJG( V( 1 ) )
  184. T1 = TAU*CONJG( V1 )
  185. V2 = CONJG( V( 2 ) )
  186. T2 = TAU*CONJG( V2 )
  187. DO 40 J = 1, N
  188. SUM = V1*C( 1, J ) + V2*C( 2, J )
  189. C( 1, J ) = C( 1, J ) - SUM*T1
  190. C( 2, J ) = C( 2, J ) - SUM*T2
  191. 40 CONTINUE
  192. GO TO 410
  193. 50 CONTINUE
  194. *
  195. * Special code for 3 x 3 Householder
  196. *
  197. V1 = CONJG( V( 1 ) )
  198. T1 = TAU*CONJG( V1 )
  199. V2 = CONJG( V( 2 ) )
  200. T2 = TAU*CONJG( V2 )
  201. V3 = CONJG( V( 3 ) )
  202. T3 = TAU*CONJG( V3 )
  203. DO 60 J = 1, N
  204. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J )
  205. C( 1, J ) = C( 1, J ) - SUM*T1
  206. C( 2, J ) = C( 2, J ) - SUM*T2
  207. C( 3, J ) = C( 3, J ) - SUM*T3
  208. 60 CONTINUE
  209. GO TO 410
  210. 70 CONTINUE
  211. *
  212. * Special code for 4 x 4 Householder
  213. *
  214. V1 = CONJG( V( 1 ) )
  215. T1 = TAU*CONJG( V1 )
  216. V2 = CONJG( V( 2 ) )
  217. T2 = TAU*CONJG( V2 )
  218. V3 = CONJG( V( 3 ) )
  219. T3 = TAU*CONJG( V3 )
  220. V4 = CONJG( V( 4 ) )
  221. T4 = TAU*CONJG( V4 )
  222. DO 80 J = 1, N
  223. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  224. $ V4*C( 4, J )
  225. C( 1, J ) = C( 1, J ) - SUM*T1
  226. C( 2, J ) = C( 2, J ) - SUM*T2
  227. C( 3, J ) = C( 3, J ) - SUM*T3
  228. C( 4, J ) = C( 4, J ) - SUM*T4
  229. 80 CONTINUE
  230. GO TO 410
  231. 90 CONTINUE
  232. *
  233. * Special code for 5 x 5 Householder
  234. *
  235. V1 = CONJG( V( 1 ) )
  236. T1 = TAU*CONJG( V1 )
  237. V2 = CONJG( V( 2 ) )
  238. T2 = TAU*CONJG( V2 )
  239. V3 = CONJG( V( 3 ) )
  240. T3 = TAU*CONJG( V3 )
  241. V4 = CONJG( V( 4 ) )
  242. T4 = TAU*CONJG( V4 )
  243. V5 = CONJG( V( 5 ) )
  244. T5 = TAU*CONJG( V5 )
  245. DO 100 J = 1, N
  246. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  247. $ V4*C( 4, J ) + V5*C( 5, J )
  248. C( 1, J ) = C( 1, J ) - SUM*T1
  249. C( 2, J ) = C( 2, J ) - SUM*T2
  250. C( 3, J ) = C( 3, J ) - SUM*T3
  251. C( 4, J ) = C( 4, J ) - SUM*T4
  252. C( 5, J ) = C( 5, J ) - SUM*T5
  253. 100 CONTINUE
  254. GO TO 410
  255. 110 CONTINUE
  256. *
  257. * Special code for 6 x 6 Householder
  258. *
  259. V1 = CONJG( V( 1 ) )
  260. T1 = TAU*CONJG( V1 )
  261. V2 = CONJG( V( 2 ) )
  262. T2 = TAU*CONJG( V2 )
  263. V3 = CONJG( V( 3 ) )
  264. T3 = TAU*CONJG( V3 )
  265. V4 = CONJG( V( 4 ) )
  266. T4 = TAU*CONJG( V4 )
  267. V5 = CONJG( V( 5 ) )
  268. T5 = TAU*CONJG( V5 )
  269. V6 = CONJG( V( 6 ) )
  270. T6 = TAU*CONJG( V6 )
  271. DO 120 J = 1, N
  272. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  273. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J )
  274. C( 1, J ) = C( 1, J ) - SUM*T1
  275. C( 2, J ) = C( 2, J ) - SUM*T2
  276. C( 3, J ) = C( 3, J ) - SUM*T3
  277. C( 4, J ) = C( 4, J ) - SUM*T4
  278. C( 5, J ) = C( 5, J ) - SUM*T5
  279. C( 6, J ) = C( 6, J ) - SUM*T6
  280. 120 CONTINUE
  281. GO TO 410
  282. 130 CONTINUE
  283. *
  284. * Special code for 7 x 7 Householder
  285. *
  286. V1 = CONJG( V( 1 ) )
  287. T1 = TAU*CONJG( V1 )
  288. V2 = CONJG( V( 2 ) )
  289. T2 = TAU*CONJG( V2 )
  290. V3 = CONJG( V( 3 ) )
  291. T3 = TAU*CONJG( V3 )
  292. V4 = CONJG( V( 4 ) )
  293. T4 = TAU*CONJG( V4 )
  294. V5 = CONJG( V( 5 ) )
  295. T5 = TAU*CONJG( V5 )
  296. V6 = CONJG( V( 6 ) )
  297. T6 = TAU*CONJG( V6 )
  298. V7 = CONJG( V( 7 ) )
  299. T7 = TAU*CONJG( V7 )
  300. DO 140 J = 1, N
  301. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  302. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  303. $ V7*C( 7, J )
  304. C( 1, J ) = C( 1, J ) - SUM*T1
  305. C( 2, J ) = C( 2, J ) - SUM*T2
  306. C( 3, J ) = C( 3, J ) - SUM*T3
  307. C( 4, J ) = C( 4, J ) - SUM*T4
  308. C( 5, J ) = C( 5, J ) - SUM*T5
  309. C( 6, J ) = C( 6, J ) - SUM*T6
  310. C( 7, J ) = C( 7, J ) - SUM*T7
  311. 140 CONTINUE
  312. GO TO 410
  313. 150 CONTINUE
  314. *
  315. * Special code for 8 x 8 Householder
  316. *
  317. V1 = CONJG( V( 1 ) )
  318. T1 = TAU*CONJG( V1 )
  319. V2 = CONJG( V( 2 ) )
  320. T2 = TAU*CONJG( V2 )
  321. V3 = CONJG( V( 3 ) )
  322. T3 = TAU*CONJG( V3 )
  323. V4 = CONJG( V( 4 ) )
  324. T4 = TAU*CONJG( V4 )
  325. V5 = CONJG( V( 5 ) )
  326. T5 = TAU*CONJG( V5 )
  327. V6 = CONJG( V( 6 ) )
  328. T6 = TAU*CONJG( V6 )
  329. V7 = CONJG( V( 7 ) )
  330. T7 = TAU*CONJG( V7 )
  331. V8 = CONJG( V( 8 ) )
  332. T8 = TAU*CONJG( V8 )
  333. DO 160 J = 1, N
  334. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  335. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  336. $ V7*C( 7, J ) + V8*C( 8, J )
  337. C( 1, J ) = C( 1, J ) - SUM*T1
  338. C( 2, J ) = C( 2, J ) - SUM*T2
  339. C( 3, J ) = C( 3, J ) - SUM*T3
  340. C( 4, J ) = C( 4, J ) - SUM*T4
  341. C( 5, J ) = C( 5, J ) - SUM*T5
  342. C( 6, J ) = C( 6, J ) - SUM*T6
  343. C( 7, J ) = C( 7, J ) - SUM*T7
  344. C( 8, J ) = C( 8, J ) - SUM*T8
  345. 160 CONTINUE
  346. GO TO 410
  347. 170 CONTINUE
  348. *
  349. * Special code for 9 x 9 Householder
  350. *
  351. V1 = CONJG( V( 1 ) )
  352. T1 = TAU*CONJG( V1 )
  353. V2 = CONJG( V( 2 ) )
  354. T2 = TAU*CONJG( V2 )
  355. V3 = CONJG( V( 3 ) )
  356. T3 = TAU*CONJG( V3 )
  357. V4 = CONJG( V( 4 ) )
  358. T4 = TAU*CONJG( V4 )
  359. V5 = CONJG( V( 5 ) )
  360. T5 = TAU*CONJG( V5 )
  361. V6 = CONJG( V( 6 ) )
  362. T6 = TAU*CONJG( V6 )
  363. V7 = CONJG( V( 7 ) )
  364. T7 = TAU*CONJG( V7 )
  365. V8 = CONJG( V( 8 ) )
  366. T8 = TAU*CONJG( V8 )
  367. V9 = CONJG( V( 9 ) )
  368. T9 = TAU*CONJG( V9 )
  369. DO 180 J = 1, N
  370. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  371. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  372. $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J )
  373. C( 1, J ) = C( 1, J ) - SUM*T1
  374. C( 2, J ) = C( 2, J ) - SUM*T2
  375. C( 3, J ) = C( 3, J ) - SUM*T3
  376. C( 4, J ) = C( 4, J ) - SUM*T4
  377. C( 5, J ) = C( 5, J ) - SUM*T5
  378. C( 6, J ) = C( 6, J ) - SUM*T6
  379. C( 7, J ) = C( 7, J ) - SUM*T7
  380. C( 8, J ) = C( 8, J ) - SUM*T8
  381. C( 9, J ) = C( 9, J ) - SUM*T9
  382. 180 CONTINUE
  383. GO TO 410
  384. 190 CONTINUE
  385. *
  386. * Special code for 10 x 10 Householder
  387. *
  388. V1 = CONJG( V( 1 ) )
  389. T1 = TAU*CONJG( V1 )
  390. V2 = CONJG( V( 2 ) )
  391. T2 = TAU*CONJG( V2 )
  392. V3 = CONJG( V( 3 ) )
  393. T3 = TAU*CONJG( V3 )
  394. V4 = CONJG( V( 4 ) )
  395. T4 = TAU*CONJG( V4 )
  396. V5 = CONJG( V( 5 ) )
  397. T5 = TAU*CONJG( V5 )
  398. V6 = CONJG( V( 6 ) )
  399. T6 = TAU*CONJG( V6 )
  400. V7 = CONJG( V( 7 ) )
  401. T7 = TAU*CONJG( V7 )
  402. V8 = CONJG( V( 8 ) )
  403. T8 = TAU*CONJG( V8 )
  404. V9 = CONJG( V( 9 ) )
  405. T9 = TAU*CONJG( V9 )
  406. V10 = CONJG( V( 10 ) )
  407. T10 = TAU*CONJG( V10 )
  408. DO 200 J = 1, N
  409. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  410. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  411. $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) +
  412. $ V10*C( 10, J )
  413. C( 1, J ) = C( 1, J ) - SUM*T1
  414. C( 2, J ) = C( 2, J ) - SUM*T2
  415. C( 3, J ) = C( 3, J ) - SUM*T3
  416. C( 4, J ) = C( 4, J ) - SUM*T4
  417. C( 5, J ) = C( 5, J ) - SUM*T5
  418. C( 6, J ) = C( 6, J ) - SUM*T6
  419. C( 7, J ) = C( 7, J ) - SUM*T7
  420. C( 8, J ) = C( 8, J ) - SUM*T8
  421. C( 9, J ) = C( 9, J ) - SUM*T9
  422. C( 10, J ) = C( 10, J ) - SUM*T10
  423. 200 CONTINUE
  424. GO TO 410
  425. ELSE
  426. *
  427. * Form C * H, where H has order n.
  428. *
  429. GO TO ( 210, 230, 250, 270, 290, 310, 330, 350,
  430. $ 370, 390 )N
  431. *
  432. * Code for general N
  433. *
  434. CALL CLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK )
  435. GO TO 410
  436. 210 CONTINUE
  437. *
  438. * Special code for 1 x 1 Householder
  439. *
  440. T1 = ONE - TAU*V( 1 )*CONJG( V( 1 ) )
  441. DO 220 J = 1, M
  442. C( J, 1 ) = T1*C( J, 1 )
  443. 220 CONTINUE
  444. GO TO 410
  445. 230 CONTINUE
  446. *
  447. * Special code for 2 x 2 Householder
  448. *
  449. V1 = V( 1 )
  450. T1 = TAU*CONJG( V1 )
  451. V2 = V( 2 )
  452. T2 = TAU*CONJG( V2 )
  453. DO 240 J = 1, M
  454. SUM = V1*C( J, 1 ) + V2*C( J, 2 )
  455. C( J, 1 ) = C( J, 1 ) - SUM*T1
  456. C( J, 2 ) = C( J, 2 ) - SUM*T2
  457. 240 CONTINUE
  458. GO TO 410
  459. 250 CONTINUE
  460. *
  461. * Special code for 3 x 3 Householder
  462. *
  463. V1 = V( 1 )
  464. T1 = TAU*CONJG( V1 )
  465. V2 = V( 2 )
  466. T2 = TAU*CONJG( V2 )
  467. V3 = V( 3 )
  468. T3 = TAU*CONJG( V3 )
  469. DO 260 J = 1, M
  470. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 )
  471. C( J, 1 ) = C( J, 1 ) - SUM*T1
  472. C( J, 2 ) = C( J, 2 ) - SUM*T2
  473. C( J, 3 ) = C( J, 3 ) - SUM*T3
  474. 260 CONTINUE
  475. GO TO 410
  476. 270 CONTINUE
  477. *
  478. * Special code for 4 x 4 Householder
  479. *
  480. V1 = V( 1 )
  481. T1 = TAU*CONJG( V1 )
  482. V2 = V( 2 )
  483. T2 = TAU*CONJG( V2 )
  484. V3 = V( 3 )
  485. T3 = TAU*CONJG( V3 )
  486. V4 = V( 4 )
  487. T4 = TAU*CONJG( V4 )
  488. DO 280 J = 1, M
  489. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  490. $ V4*C( J, 4 )
  491. C( J, 1 ) = C( J, 1 ) - SUM*T1
  492. C( J, 2 ) = C( J, 2 ) - SUM*T2
  493. C( J, 3 ) = C( J, 3 ) - SUM*T3
  494. C( J, 4 ) = C( J, 4 ) - SUM*T4
  495. 280 CONTINUE
  496. GO TO 410
  497. 290 CONTINUE
  498. *
  499. * Special code for 5 x 5 Householder
  500. *
  501. V1 = V( 1 )
  502. T1 = TAU*CONJG( V1 )
  503. V2 = V( 2 )
  504. T2 = TAU*CONJG( V2 )
  505. V3 = V( 3 )
  506. T3 = TAU*CONJG( V3 )
  507. V4 = V( 4 )
  508. T4 = TAU*CONJG( V4 )
  509. V5 = V( 5 )
  510. T5 = TAU*CONJG( V5 )
  511. DO 300 J = 1, M
  512. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  513. $ V4*C( J, 4 ) + V5*C( J, 5 )
  514. C( J, 1 ) = C( J, 1 ) - SUM*T1
  515. C( J, 2 ) = C( J, 2 ) - SUM*T2
  516. C( J, 3 ) = C( J, 3 ) - SUM*T3
  517. C( J, 4 ) = C( J, 4 ) - SUM*T4
  518. C( J, 5 ) = C( J, 5 ) - SUM*T5
  519. 300 CONTINUE
  520. GO TO 410
  521. 310 CONTINUE
  522. *
  523. * Special code for 6 x 6 Householder
  524. *
  525. V1 = V( 1 )
  526. T1 = TAU*CONJG( V1 )
  527. V2 = V( 2 )
  528. T2 = TAU*CONJG( V2 )
  529. V3 = V( 3 )
  530. T3 = TAU*CONJG( V3 )
  531. V4 = V( 4 )
  532. T4 = TAU*CONJG( V4 )
  533. V5 = V( 5 )
  534. T5 = TAU*CONJG( V5 )
  535. V6 = V( 6 )
  536. T6 = TAU*CONJG( V6 )
  537. DO 320 J = 1, M
  538. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  539. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 )
  540. C( J, 1 ) = C( J, 1 ) - SUM*T1
  541. C( J, 2 ) = C( J, 2 ) - SUM*T2
  542. C( J, 3 ) = C( J, 3 ) - SUM*T3
  543. C( J, 4 ) = C( J, 4 ) - SUM*T4
  544. C( J, 5 ) = C( J, 5 ) - SUM*T5
  545. C( J, 6 ) = C( J, 6 ) - SUM*T6
  546. 320 CONTINUE
  547. GO TO 410
  548. 330 CONTINUE
  549. *
  550. * Special code for 7 x 7 Householder
  551. *
  552. V1 = V( 1 )
  553. T1 = TAU*CONJG( V1 )
  554. V2 = V( 2 )
  555. T2 = TAU*CONJG( V2 )
  556. V3 = V( 3 )
  557. T3 = TAU*CONJG( V3 )
  558. V4 = V( 4 )
  559. T4 = TAU*CONJG( V4 )
  560. V5 = V( 5 )
  561. T5 = TAU*CONJG( V5 )
  562. V6 = V( 6 )
  563. T6 = TAU*CONJG( V6 )
  564. V7 = V( 7 )
  565. T7 = TAU*CONJG( V7 )
  566. DO 340 J = 1, M
  567. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  568. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  569. $ V7*C( J, 7 )
  570. C( J, 1 ) = C( J, 1 ) - SUM*T1
  571. C( J, 2 ) = C( J, 2 ) - SUM*T2
  572. C( J, 3 ) = C( J, 3 ) - SUM*T3
  573. C( J, 4 ) = C( J, 4 ) - SUM*T4
  574. C( J, 5 ) = C( J, 5 ) - SUM*T5
  575. C( J, 6 ) = C( J, 6 ) - SUM*T6
  576. C( J, 7 ) = C( J, 7 ) - SUM*T7
  577. 340 CONTINUE
  578. GO TO 410
  579. 350 CONTINUE
  580. *
  581. * Special code for 8 x 8 Householder
  582. *
  583. V1 = V( 1 )
  584. T1 = TAU*CONJG( V1 )
  585. V2 = V( 2 )
  586. T2 = TAU*CONJG( V2 )
  587. V3 = V( 3 )
  588. T3 = TAU*CONJG( V3 )
  589. V4 = V( 4 )
  590. T4 = TAU*CONJG( V4 )
  591. V5 = V( 5 )
  592. T5 = TAU*CONJG( V5 )
  593. V6 = V( 6 )
  594. T6 = TAU*CONJG( V6 )
  595. V7 = V( 7 )
  596. T7 = TAU*CONJG( V7 )
  597. V8 = V( 8 )
  598. T8 = TAU*CONJG( V8 )
  599. DO 360 J = 1, M
  600. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  601. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  602. $ V7*C( J, 7 ) + V8*C( J, 8 )
  603. C( J, 1 ) = C( J, 1 ) - SUM*T1
  604. C( J, 2 ) = C( J, 2 ) - SUM*T2
  605. C( J, 3 ) = C( J, 3 ) - SUM*T3
  606. C( J, 4 ) = C( J, 4 ) - SUM*T4
  607. C( J, 5 ) = C( J, 5 ) - SUM*T5
  608. C( J, 6 ) = C( J, 6 ) - SUM*T6
  609. C( J, 7 ) = C( J, 7 ) - SUM*T7
  610. C( J, 8 ) = C( J, 8 ) - SUM*T8
  611. 360 CONTINUE
  612. GO TO 410
  613. 370 CONTINUE
  614. *
  615. * Special code for 9 x 9 Householder
  616. *
  617. V1 = V( 1 )
  618. T1 = TAU*CONJG( V1 )
  619. V2 = V( 2 )
  620. T2 = TAU*CONJG( V2 )
  621. V3 = V( 3 )
  622. T3 = TAU*CONJG( V3 )
  623. V4 = V( 4 )
  624. T4 = TAU*CONJG( V4 )
  625. V5 = V( 5 )
  626. T5 = TAU*CONJG( V5 )
  627. V6 = V( 6 )
  628. T6 = TAU*CONJG( V6 )
  629. V7 = V( 7 )
  630. T7 = TAU*CONJG( V7 )
  631. V8 = V( 8 )
  632. T8 = TAU*CONJG( V8 )
  633. V9 = V( 9 )
  634. T9 = TAU*CONJG( V9 )
  635. DO 380 J = 1, M
  636. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  637. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  638. $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 )
  639. C( J, 1 ) = C( J, 1 ) - SUM*T1
  640. C( J, 2 ) = C( J, 2 ) - SUM*T2
  641. C( J, 3 ) = C( J, 3 ) - SUM*T3
  642. C( J, 4 ) = C( J, 4 ) - SUM*T4
  643. C( J, 5 ) = C( J, 5 ) - SUM*T5
  644. C( J, 6 ) = C( J, 6 ) - SUM*T6
  645. C( J, 7 ) = C( J, 7 ) - SUM*T7
  646. C( J, 8 ) = C( J, 8 ) - SUM*T8
  647. C( J, 9 ) = C( J, 9 ) - SUM*T9
  648. 380 CONTINUE
  649. GO TO 410
  650. 390 CONTINUE
  651. *
  652. * Special code for 10 x 10 Householder
  653. *
  654. V1 = V( 1 )
  655. T1 = TAU*CONJG( V1 )
  656. V2 = V( 2 )
  657. T2 = TAU*CONJG( V2 )
  658. V3 = V( 3 )
  659. T3 = TAU*CONJG( V3 )
  660. V4 = V( 4 )
  661. T4 = TAU*CONJG( V4 )
  662. V5 = V( 5 )
  663. T5 = TAU*CONJG( V5 )
  664. V6 = V( 6 )
  665. T6 = TAU*CONJG( V6 )
  666. V7 = V( 7 )
  667. T7 = TAU*CONJG( V7 )
  668. V8 = V( 8 )
  669. T8 = TAU*CONJG( V8 )
  670. V9 = V( 9 )
  671. T9 = TAU*CONJG( V9 )
  672. V10 = V( 10 )
  673. T10 = TAU*CONJG( V10 )
  674. DO 400 J = 1, M
  675. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  676. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  677. $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) +
  678. $ V10*C( J, 10 )
  679. C( J, 1 ) = C( J, 1 ) - SUM*T1
  680. C( J, 2 ) = C( J, 2 ) - SUM*T2
  681. C( J, 3 ) = C( J, 3 ) - SUM*T3
  682. C( J, 4 ) = C( J, 4 ) - SUM*T4
  683. C( J, 5 ) = C( J, 5 ) - SUM*T5
  684. C( J, 6 ) = C( J, 6 ) - SUM*T6
  685. C( J, 7 ) = C( J, 7 ) - SUM*T7
  686. C( J, 8 ) = C( J, 8 ) - SUM*T8
  687. C( J, 9 ) = C( J, 9 ) - SUM*T9
  688. C( J, 10 ) = C( J, 10 ) - SUM*T10
  689. 400 CONTINUE
  690. GO TO 410
  691. END IF
  692. 410 RETURN
  693. *
  694. * End of CLARFX
  695. *
  696. END