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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  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. LDA >= 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. *> \date September 2012
  116. *
  117. *> \ingroup complexOTHERauxiliary
  118. *
  119. * =====================================================================
  120. SUBROUTINE CLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
  121. *
  122. * -- LAPACK auxiliary routine (version 3.4.2) --
  123. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  124. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  125. * September 2012
  126. *
  127. * .. Scalar Arguments ..
  128. CHARACTER SIDE
  129. INTEGER LDC, M, N
  130. COMPLEX TAU
  131. * ..
  132. * .. Array Arguments ..
  133. COMPLEX C( LDC, * ), V( * ), WORK( * )
  134. * ..
  135. *
  136. * =====================================================================
  137. *
  138. * .. Parameters ..
  139. COMPLEX ZERO, ONE
  140. PARAMETER ( ZERO = ( 0.0E+0, 0.0E+0 ),
  141. $ ONE = ( 1.0E+0, 0.0E+0 ) )
  142. * ..
  143. * .. Local Scalars ..
  144. INTEGER J
  145. COMPLEX SUM, T1, T10, T2, T3, T4, T5, T6, T7, T8, T9,
  146. $ V1, V10, V2, V3, V4, V5, V6, V7, V8, V9
  147. * ..
  148. * .. External Functions ..
  149. LOGICAL LSAME
  150. EXTERNAL LSAME
  151. * ..
  152. * .. External Subroutines ..
  153. EXTERNAL CLARF
  154. * ..
  155. * .. Intrinsic Functions ..
  156. INTRINSIC CONJG
  157. * ..
  158. * .. Executable Statements ..
  159. *
  160. IF( TAU.EQ.ZERO )
  161. $ RETURN
  162. IF( LSAME( SIDE, 'L' ) ) THEN
  163. *
  164. * Form H * C, where H has order m.
  165. *
  166. GO TO ( 10, 30, 50, 70, 90, 110, 130, 150,
  167. $ 170, 190 )M
  168. *
  169. * Code for general M
  170. *
  171. CALL CLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK )
  172. GO TO 410
  173. 10 CONTINUE
  174. *
  175. * Special code for 1 x 1 Householder
  176. *
  177. T1 = ONE - TAU*V( 1 )*CONJG( V( 1 ) )
  178. DO 20 J = 1, N
  179. C( 1, J ) = T1*C( 1, J )
  180. 20 CONTINUE
  181. GO TO 410
  182. 30 CONTINUE
  183. *
  184. * Special code for 2 x 2 Householder
  185. *
  186. V1 = CONJG( V( 1 ) )
  187. T1 = TAU*CONJG( V1 )
  188. V2 = CONJG( V( 2 ) )
  189. T2 = TAU*CONJG( V2 )
  190. DO 40 J = 1, N
  191. SUM = V1*C( 1, J ) + V2*C( 2, J )
  192. C( 1, J ) = C( 1, J ) - SUM*T1
  193. C( 2, J ) = C( 2, J ) - SUM*T2
  194. 40 CONTINUE
  195. GO TO 410
  196. 50 CONTINUE
  197. *
  198. * Special code for 3 x 3 Householder
  199. *
  200. V1 = CONJG( V( 1 ) )
  201. T1 = TAU*CONJG( V1 )
  202. V2 = CONJG( V( 2 ) )
  203. T2 = TAU*CONJG( V2 )
  204. V3 = CONJG( V( 3 ) )
  205. T3 = TAU*CONJG( V3 )
  206. DO 60 J = 1, N
  207. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J )
  208. C( 1, J ) = C( 1, J ) - SUM*T1
  209. C( 2, J ) = C( 2, J ) - SUM*T2
  210. C( 3, J ) = C( 3, J ) - SUM*T3
  211. 60 CONTINUE
  212. GO TO 410
  213. 70 CONTINUE
  214. *
  215. * Special code for 4 x 4 Householder
  216. *
  217. V1 = CONJG( V( 1 ) )
  218. T1 = TAU*CONJG( V1 )
  219. V2 = CONJG( V( 2 ) )
  220. T2 = TAU*CONJG( V2 )
  221. V3 = CONJG( V( 3 ) )
  222. T3 = TAU*CONJG( V3 )
  223. V4 = CONJG( V( 4 ) )
  224. T4 = TAU*CONJG( V4 )
  225. DO 80 J = 1, N
  226. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  227. $ V4*C( 4, J )
  228. C( 1, J ) = C( 1, J ) - SUM*T1
  229. C( 2, J ) = C( 2, J ) - SUM*T2
  230. C( 3, J ) = C( 3, J ) - SUM*T3
  231. C( 4, J ) = C( 4, J ) - SUM*T4
  232. 80 CONTINUE
  233. GO TO 410
  234. 90 CONTINUE
  235. *
  236. * Special code for 5 x 5 Householder
  237. *
  238. V1 = CONJG( V( 1 ) )
  239. T1 = TAU*CONJG( V1 )
  240. V2 = CONJG( V( 2 ) )
  241. T2 = TAU*CONJG( V2 )
  242. V3 = CONJG( V( 3 ) )
  243. T3 = TAU*CONJG( V3 )
  244. V4 = CONJG( V( 4 ) )
  245. T4 = TAU*CONJG( V4 )
  246. V5 = CONJG( V( 5 ) )
  247. T5 = TAU*CONJG( V5 )
  248. DO 100 J = 1, N
  249. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  250. $ V4*C( 4, J ) + V5*C( 5, J )
  251. C( 1, J ) = C( 1, J ) - SUM*T1
  252. C( 2, J ) = C( 2, J ) - SUM*T2
  253. C( 3, J ) = C( 3, J ) - SUM*T3
  254. C( 4, J ) = C( 4, J ) - SUM*T4
  255. C( 5, J ) = C( 5, J ) - SUM*T5
  256. 100 CONTINUE
  257. GO TO 410
  258. 110 CONTINUE
  259. *
  260. * Special code for 6 x 6 Householder
  261. *
  262. V1 = CONJG( V( 1 ) )
  263. T1 = TAU*CONJG( V1 )
  264. V2 = CONJG( V( 2 ) )
  265. T2 = TAU*CONJG( V2 )
  266. V3 = CONJG( V( 3 ) )
  267. T3 = TAU*CONJG( V3 )
  268. V4 = CONJG( V( 4 ) )
  269. T4 = TAU*CONJG( V4 )
  270. V5 = CONJG( V( 5 ) )
  271. T5 = TAU*CONJG( V5 )
  272. V6 = CONJG( V( 6 ) )
  273. T6 = TAU*CONJG( V6 )
  274. DO 120 J = 1, N
  275. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  276. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J )
  277. C( 1, J ) = C( 1, J ) - SUM*T1
  278. C( 2, J ) = C( 2, J ) - SUM*T2
  279. C( 3, J ) = C( 3, J ) - SUM*T3
  280. C( 4, J ) = C( 4, J ) - SUM*T4
  281. C( 5, J ) = C( 5, J ) - SUM*T5
  282. C( 6, J ) = C( 6, J ) - SUM*T6
  283. 120 CONTINUE
  284. GO TO 410
  285. 130 CONTINUE
  286. *
  287. * Special code for 7 x 7 Householder
  288. *
  289. V1 = CONJG( V( 1 ) )
  290. T1 = TAU*CONJG( V1 )
  291. V2 = CONJG( V( 2 ) )
  292. T2 = TAU*CONJG( V2 )
  293. V3 = CONJG( V( 3 ) )
  294. T3 = TAU*CONJG( V3 )
  295. V4 = CONJG( V( 4 ) )
  296. T4 = TAU*CONJG( V4 )
  297. V5 = CONJG( V( 5 ) )
  298. T5 = TAU*CONJG( V5 )
  299. V6 = CONJG( V( 6 ) )
  300. T6 = TAU*CONJG( V6 )
  301. V7 = CONJG( V( 7 ) )
  302. T7 = TAU*CONJG( V7 )
  303. DO 140 J = 1, N
  304. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  305. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  306. $ V7*C( 7, J )
  307. C( 1, J ) = C( 1, J ) - SUM*T1
  308. C( 2, J ) = C( 2, J ) - SUM*T2
  309. C( 3, J ) = C( 3, J ) - SUM*T3
  310. C( 4, J ) = C( 4, J ) - SUM*T4
  311. C( 5, J ) = C( 5, J ) - SUM*T5
  312. C( 6, J ) = C( 6, J ) - SUM*T6
  313. C( 7, J ) = C( 7, J ) - SUM*T7
  314. 140 CONTINUE
  315. GO TO 410
  316. 150 CONTINUE
  317. *
  318. * Special code for 8 x 8 Householder
  319. *
  320. V1 = CONJG( V( 1 ) )
  321. T1 = TAU*CONJG( V1 )
  322. V2 = CONJG( V( 2 ) )
  323. T2 = TAU*CONJG( V2 )
  324. V3 = CONJG( V( 3 ) )
  325. T3 = TAU*CONJG( V3 )
  326. V4 = CONJG( V( 4 ) )
  327. T4 = TAU*CONJG( V4 )
  328. V5 = CONJG( V( 5 ) )
  329. T5 = TAU*CONJG( V5 )
  330. V6 = CONJG( V( 6 ) )
  331. T6 = TAU*CONJG( V6 )
  332. V7 = CONJG( V( 7 ) )
  333. T7 = TAU*CONJG( V7 )
  334. V8 = CONJG( V( 8 ) )
  335. T8 = TAU*CONJG( V8 )
  336. DO 160 J = 1, N
  337. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  338. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  339. $ V7*C( 7, J ) + V8*C( 8, J )
  340. C( 1, J ) = C( 1, J ) - SUM*T1
  341. C( 2, J ) = C( 2, J ) - SUM*T2
  342. C( 3, J ) = C( 3, J ) - SUM*T3
  343. C( 4, J ) = C( 4, J ) - SUM*T4
  344. C( 5, J ) = C( 5, J ) - SUM*T5
  345. C( 6, J ) = C( 6, J ) - SUM*T6
  346. C( 7, J ) = C( 7, J ) - SUM*T7
  347. C( 8, J ) = C( 8, J ) - SUM*T8
  348. 160 CONTINUE
  349. GO TO 410
  350. 170 CONTINUE
  351. *
  352. * Special code for 9 x 9 Householder
  353. *
  354. V1 = CONJG( V( 1 ) )
  355. T1 = TAU*CONJG( V1 )
  356. V2 = CONJG( V( 2 ) )
  357. T2 = TAU*CONJG( V2 )
  358. V3 = CONJG( V( 3 ) )
  359. T3 = TAU*CONJG( V3 )
  360. V4 = CONJG( V( 4 ) )
  361. T4 = TAU*CONJG( V4 )
  362. V5 = CONJG( V( 5 ) )
  363. T5 = TAU*CONJG( V5 )
  364. V6 = CONJG( V( 6 ) )
  365. T6 = TAU*CONJG( V6 )
  366. V7 = CONJG( V( 7 ) )
  367. T7 = TAU*CONJG( V7 )
  368. V8 = CONJG( V( 8 ) )
  369. T8 = TAU*CONJG( V8 )
  370. V9 = CONJG( V( 9 ) )
  371. T9 = TAU*CONJG( V9 )
  372. DO 180 J = 1, N
  373. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  374. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  375. $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J )
  376. C( 1, J ) = C( 1, J ) - SUM*T1
  377. C( 2, J ) = C( 2, J ) - SUM*T2
  378. C( 3, J ) = C( 3, J ) - SUM*T3
  379. C( 4, J ) = C( 4, J ) - SUM*T4
  380. C( 5, J ) = C( 5, J ) - SUM*T5
  381. C( 6, J ) = C( 6, J ) - SUM*T6
  382. C( 7, J ) = C( 7, J ) - SUM*T7
  383. C( 8, J ) = C( 8, J ) - SUM*T8
  384. C( 9, J ) = C( 9, J ) - SUM*T9
  385. 180 CONTINUE
  386. GO TO 410
  387. 190 CONTINUE
  388. *
  389. * Special code for 10 x 10 Householder
  390. *
  391. V1 = CONJG( V( 1 ) )
  392. T1 = TAU*CONJG( V1 )
  393. V2 = CONJG( V( 2 ) )
  394. T2 = TAU*CONJG( V2 )
  395. V3 = CONJG( V( 3 ) )
  396. T3 = TAU*CONJG( V3 )
  397. V4 = CONJG( V( 4 ) )
  398. T4 = TAU*CONJG( V4 )
  399. V5 = CONJG( V( 5 ) )
  400. T5 = TAU*CONJG( V5 )
  401. V6 = CONJG( V( 6 ) )
  402. T6 = TAU*CONJG( V6 )
  403. V7 = CONJG( V( 7 ) )
  404. T7 = TAU*CONJG( V7 )
  405. V8 = CONJG( V( 8 ) )
  406. T8 = TAU*CONJG( V8 )
  407. V9 = CONJG( V( 9 ) )
  408. T9 = TAU*CONJG( V9 )
  409. V10 = CONJG( V( 10 ) )
  410. T10 = TAU*CONJG( V10 )
  411. DO 200 J = 1, N
  412. SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  413. $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  414. $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) +
  415. $ V10*C( 10, J )
  416. C( 1, J ) = C( 1, J ) - SUM*T1
  417. C( 2, J ) = C( 2, J ) - SUM*T2
  418. C( 3, J ) = C( 3, J ) - SUM*T3
  419. C( 4, J ) = C( 4, J ) - SUM*T4
  420. C( 5, J ) = C( 5, J ) - SUM*T5
  421. C( 6, J ) = C( 6, J ) - SUM*T6
  422. C( 7, J ) = C( 7, J ) - SUM*T7
  423. C( 8, J ) = C( 8, J ) - SUM*T8
  424. C( 9, J ) = C( 9, J ) - SUM*T9
  425. C( 10, J ) = C( 10, J ) - SUM*T10
  426. 200 CONTINUE
  427. GO TO 410
  428. ELSE
  429. *
  430. * Form C * H, where H has order n.
  431. *
  432. GO TO ( 210, 230, 250, 270, 290, 310, 330, 350,
  433. $ 370, 390 )N
  434. *
  435. * Code for general N
  436. *
  437. CALL CLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK )
  438. GO TO 410
  439. 210 CONTINUE
  440. *
  441. * Special code for 1 x 1 Householder
  442. *
  443. T1 = ONE - TAU*V( 1 )*CONJG( V( 1 ) )
  444. DO 220 J = 1, M
  445. C( J, 1 ) = T1*C( J, 1 )
  446. 220 CONTINUE
  447. GO TO 410
  448. 230 CONTINUE
  449. *
  450. * Special code for 2 x 2 Householder
  451. *
  452. V1 = V( 1 )
  453. T1 = TAU*CONJG( V1 )
  454. V2 = V( 2 )
  455. T2 = TAU*CONJG( V2 )
  456. DO 240 J = 1, M
  457. SUM = V1*C( J, 1 ) + V2*C( J, 2 )
  458. C( J, 1 ) = C( J, 1 ) - SUM*T1
  459. C( J, 2 ) = C( J, 2 ) - SUM*T2
  460. 240 CONTINUE
  461. GO TO 410
  462. 250 CONTINUE
  463. *
  464. * Special code for 3 x 3 Householder
  465. *
  466. V1 = V( 1 )
  467. T1 = TAU*CONJG( V1 )
  468. V2 = V( 2 )
  469. T2 = TAU*CONJG( V2 )
  470. V3 = V( 3 )
  471. T3 = TAU*CONJG( V3 )
  472. DO 260 J = 1, M
  473. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 )
  474. C( J, 1 ) = C( J, 1 ) - SUM*T1
  475. C( J, 2 ) = C( J, 2 ) - SUM*T2
  476. C( J, 3 ) = C( J, 3 ) - SUM*T3
  477. 260 CONTINUE
  478. GO TO 410
  479. 270 CONTINUE
  480. *
  481. * Special code for 4 x 4 Householder
  482. *
  483. V1 = V( 1 )
  484. T1 = TAU*CONJG( V1 )
  485. V2 = V( 2 )
  486. T2 = TAU*CONJG( V2 )
  487. V3 = V( 3 )
  488. T3 = TAU*CONJG( V3 )
  489. V4 = V( 4 )
  490. T4 = TAU*CONJG( V4 )
  491. DO 280 J = 1, M
  492. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  493. $ V4*C( J, 4 )
  494. C( J, 1 ) = C( J, 1 ) - SUM*T1
  495. C( J, 2 ) = C( J, 2 ) - SUM*T2
  496. C( J, 3 ) = C( J, 3 ) - SUM*T3
  497. C( J, 4 ) = C( J, 4 ) - SUM*T4
  498. 280 CONTINUE
  499. GO TO 410
  500. 290 CONTINUE
  501. *
  502. * Special code for 5 x 5 Householder
  503. *
  504. V1 = V( 1 )
  505. T1 = TAU*CONJG( V1 )
  506. V2 = V( 2 )
  507. T2 = TAU*CONJG( V2 )
  508. V3 = V( 3 )
  509. T3 = TAU*CONJG( V3 )
  510. V4 = V( 4 )
  511. T4 = TAU*CONJG( V4 )
  512. V5 = V( 5 )
  513. T5 = TAU*CONJG( V5 )
  514. DO 300 J = 1, M
  515. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  516. $ V4*C( J, 4 ) + V5*C( J, 5 )
  517. C( J, 1 ) = C( J, 1 ) - SUM*T1
  518. C( J, 2 ) = C( J, 2 ) - SUM*T2
  519. C( J, 3 ) = C( J, 3 ) - SUM*T3
  520. C( J, 4 ) = C( J, 4 ) - SUM*T4
  521. C( J, 5 ) = C( J, 5 ) - SUM*T5
  522. 300 CONTINUE
  523. GO TO 410
  524. 310 CONTINUE
  525. *
  526. * Special code for 6 x 6 Householder
  527. *
  528. V1 = V( 1 )
  529. T1 = TAU*CONJG( V1 )
  530. V2 = V( 2 )
  531. T2 = TAU*CONJG( V2 )
  532. V3 = V( 3 )
  533. T3 = TAU*CONJG( V3 )
  534. V4 = V( 4 )
  535. T4 = TAU*CONJG( V4 )
  536. V5 = V( 5 )
  537. T5 = TAU*CONJG( V5 )
  538. V6 = V( 6 )
  539. T6 = TAU*CONJG( V6 )
  540. DO 320 J = 1, M
  541. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  542. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 )
  543. C( J, 1 ) = C( J, 1 ) - SUM*T1
  544. C( J, 2 ) = C( J, 2 ) - SUM*T2
  545. C( J, 3 ) = C( J, 3 ) - SUM*T3
  546. C( J, 4 ) = C( J, 4 ) - SUM*T4
  547. C( J, 5 ) = C( J, 5 ) - SUM*T5
  548. C( J, 6 ) = C( J, 6 ) - SUM*T6
  549. 320 CONTINUE
  550. GO TO 410
  551. 330 CONTINUE
  552. *
  553. * Special code for 7 x 7 Householder
  554. *
  555. V1 = V( 1 )
  556. T1 = TAU*CONJG( V1 )
  557. V2 = V( 2 )
  558. T2 = TAU*CONJG( V2 )
  559. V3 = V( 3 )
  560. T3 = TAU*CONJG( V3 )
  561. V4 = V( 4 )
  562. T4 = TAU*CONJG( V4 )
  563. V5 = V( 5 )
  564. T5 = TAU*CONJG( V5 )
  565. V6 = V( 6 )
  566. T6 = TAU*CONJG( V6 )
  567. V7 = V( 7 )
  568. T7 = TAU*CONJG( V7 )
  569. DO 340 J = 1, M
  570. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  571. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  572. $ V7*C( J, 7 )
  573. C( J, 1 ) = C( J, 1 ) - SUM*T1
  574. C( J, 2 ) = C( J, 2 ) - SUM*T2
  575. C( J, 3 ) = C( J, 3 ) - SUM*T3
  576. C( J, 4 ) = C( J, 4 ) - SUM*T4
  577. C( J, 5 ) = C( J, 5 ) - SUM*T5
  578. C( J, 6 ) = C( J, 6 ) - SUM*T6
  579. C( J, 7 ) = C( J, 7 ) - SUM*T7
  580. 340 CONTINUE
  581. GO TO 410
  582. 350 CONTINUE
  583. *
  584. * Special code for 8 x 8 Householder
  585. *
  586. V1 = V( 1 )
  587. T1 = TAU*CONJG( V1 )
  588. V2 = V( 2 )
  589. T2 = TAU*CONJG( V2 )
  590. V3 = V( 3 )
  591. T3 = TAU*CONJG( V3 )
  592. V4 = V( 4 )
  593. T4 = TAU*CONJG( V4 )
  594. V5 = V( 5 )
  595. T5 = TAU*CONJG( V5 )
  596. V6 = V( 6 )
  597. T6 = TAU*CONJG( V6 )
  598. V7 = V( 7 )
  599. T7 = TAU*CONJG( V7 )
  600. V8 = V( 8 )
  601. T8 = TAU*CONJG( V8 )
  602. DO 360 J = 1, M
  603. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  604. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  605. $ V7*C( J, 7 ) + V8*C( J, 8 )
  606. C( J, 1 ) = C( J, 1 ) - SUM*T1
  607. C( J, 2 ) = C( J, 2 ) - SUM*T2
  608. C( J, 3 ) = C( J, 3 ) - SUM*T3
  609. C( J, 4 ) = C( J, 4 ) - SUM*T4
  610. C( J, 5 ) = C( J, 5 ) - SUM*T5
  611. C( J, 6 ) = C( J, 6 ) - SUM*T6
  612. C( J, 7 ) = C( J, 7 ) - SUM*T7
  613. C( J, 8 ) = C( J, 8 ) - SUM*T8
  614. 360 CONTINUE
  615. GO TO 410
  616. 370 CONTINUE
  617. *
  618. * Special code for 9 x 9 Householder
  619. *
  620. V1 = V( 1 )
  621. T1 = TAU*CONJG( V1 )
  622. V2 = V( 2 )
  623. T2 = TAU*CONJG( V2 )
  624. V3 = V( 3 )
  625. T3 = TAU*CONJG( V3 )
  626. V4 = V( 4 )
  627. T4 = TAU*CONJG( V4 )
  628. V5 = V( 5 )
  629. T5 = TAU*CONJG( V5 )
  630. V6 = V( 6 )
  631. T6 = TAU*CONJG( V6 )
  632. V7 = V( 7 )
  633. T7 = TAU*CONJG( V7 )
  634. V8 = V( 8 )
  635. T8 = TAU*CONJG( V8 )
  636. V9 = V( 9 )
  637. T9 = TAU*CONJG( V9 )
  638. DO 380 J = 1, M
  639. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  640. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  641. $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 )
  642. C( J, 1 ) = C( J, 1 ) - SUM*T1
  643. C( J, 2 ) = C( J, 2 ) - SUM*T2
  644. C( J, 3 ) = C( J, 3 ) - SUM*T3
  645. C( J, 4 ) = C( J, 4 ) - SUM*T4
  646. C( J, 5 ) = C( J, 5 ) - SUM*T5
  647. C( J, 6 ) = C( J, 6 ) - SUM*T6
  648. C( J, 7 ) = C( J, 7 ) - SUM*T7
  649. C( J, 8 ) = C( J, 8 ) - SUM*T8
  650. C( J, 9 ) = C( J, 9 ) - SUM*T9
  651. 380 CONTINUE
  652. GO TO 410
  653. 390 CONTINUE
  654. *
  655. * Special code for 10 x 10 Householder
  656. *
  657. V1 = V( 1 )
  658. T1 = TAU*CONJG( V1 )
  659. V2 = V( 2 )
  660. T2 = TAU*CONJG( V2 )
  661. V3 = V( 3 )
  662. T3 = TAU*CONJG( V3 )
  663. V4 = V( 4 )
  664. T4 = TAU*CONJG( V4 )
  665. V5 = V( 5 )
  666. T5 = TAU*CONJG( V5 )
  667. V6 = V( 6 )
  668. T6 = TAU*CONJG( V6 )
  669. V7 = V( 7 )
  670. T7 = TAU*CONJG( V7 )
  671. V8 = V( 8 )
  672. T8 = TAU*CONJG( V8 )
  673. V9 = V( 9 )
  674. T9 = TAU*CONJG( V9 )
  675. V10 = V( 10 )
  676. T10 = TAU*CONJG( V10 )
  677. DO 400 J = 1, M
  678. SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  679. $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  680. $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) +
  681. $ V10*C( J, 10 )
  682. C( J, 1 ) = C( J, 1 ) - SUM*T1
  683. C( J, 2 ) = C( J, 2 ) - SUM*T2
  684. C( J, 3 ) = C( J, 3 ) - SUM*T3
  685. C( J, 4 ) = C( J, 4 ) - SUM*T4
  686. C( J, 5 ) = C( J, 5 ) - SUM*T5
  687. C( J, 6 ) = C( J, 6 ) - SUM*T6
  688. C( J, 7 ) = C( J, 7 ) - SUM*T7
  689. C( J, 8 ) = C( J, 8 ) - SUM*T8
  690. C( J, 9 ) = C( J, 9 ) - SUM*T9
  691. C( J, 10 ) = C( J, 10 ) - SUM*T10
  692. 400 CONTINUE
  693. GO TO 410
  694. END IF
  695. 410 RETURN
  696. *
  697. * End of CLARFX
  698. *
  699. END