csvdc.f 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. *DECK CSVDC
  2. SUBROUTINE CSVDC (X, LDX, N, P, S, E, U, LDU, V, LDV, WORK, JOB,
  3. + INFO)
  4. C***BEGIN PROLOGUE CSVDC
  5. C***PURPOSE Perform the singular value decomposition of a rectangular
  6. C matrix.
  7. C***LIBRARY SLATEC (LINPACK)
  8. C***CATEGORY D6
  9. C***TYPE COMPLEX (SSVDC-S, DSVDC-D, CSVDC-C)
  10. C***KEYWORDS LINEAR ALGEBRA, LINPACK, MATRIX,
  11. C SINGULAR VALUE DECOMPOSITION
  12. C***AUTHOR Stewart, G. W., (U. of Maryland)
  13. C***DESCRIPTION
  14. C
  15. C CSVDC is a subroutine to reduce a complex NxP matrix X by
  16. C unitary transformations U and V to diagonal form. The
  17. C diagonal elements S(I) are the singular values of X. The
  18. C columns of U are the corresponding left singular vectors,
  19. C and the columns of V the right singular vectors.
  20. C
  21. C On Entry
  22. C
  23. C X COMPLEX(LDX,P), where LDX .GE. N.
  24. C X contains the matrix whose singular value
  25. C decomposition is to be computed. X is
  26. C destroyed by CSVDC.
  27. C
  28. C LDX INTEGER.
  29. C LDX is the leading dimension of the array X.
  30. C
  31. C N INTEGER.
  32. C N is the number of rows of the matrix X.
  33. C
  34. C P INTEGER.
  35. C P is the number of columns of the matrix X.
  36. C
  37. C LDU INTEGER.
  38. C LDU is the leading dimension of the array U
  39. C (see below).
  40. C
  41. C LDV INTEGER.
  42. C LDV is the leading dimension of the array V
  43. C (see below).
  44. C
  45. C WORK COMPLEX(N).
  46. C WORK is a scratch array.
  47. C
  48. C JOB INTEGER.
  49. C JOB controls the computation of the singular
  50. C vectors. It has the decimal expansion AB
  51. C with the following meaning
  52. C
  53. C A .EQ. 0 Do not compute the left singular
  54. C vectors.
  55. C A .EQ. 1 Return the N left singular vectors
  56. C in U.
  57. C A .GE. 2 Return the first MIN(N,P)
  58. C left singular vectors in U.
  59. C B .EQ. 0 Do not compute the right singular
  60. C vectors.
  61. C B .EQ. 1 Return the right singular vectors
  62. C in V.
  63. C
  64. C On Return
  65. C
  66. C S COMPLEX(MM), where MM = MIN(N+1,P).
  67. C The first MIN(N,P) entries of S contain the
  68. C singular values of X arranged in descending
  69. C order of magnitude.
  70. C
  71. C E COMPLEX(P).
  72. C E ordinarily contains zeros. However see the
  73. C discussion of INFO for exceptions.
  74. C
  75. C U COMPLEX(LDU,K), where LDU .GE. N. If JOBA .EQ. 1
  76. C then K .EQ. N. If JOBA .GE. 2 then
  77. C K .EQ. MIN(N,P).
  78. C U contains the matrix of right singular vectors.
  79. C U is not referenced if JOBA .EQ. 0. If N .LE. P
  80. C or if JOBA .GT. 2, then U may be identified with X
  81. C in the subroutine call.
  82. C
  83. C V COMPLEX(LDV,P), where LDV .GE. P.
  84. C V contains the matrix of right singular vectors.
  85. C V is not referenced if JOB .EQ. 0. If P .LE. N,
  86. C then V may be identified with X in the
  87. C subroutine call.
  88. C
  89. C INFO INTEGER.
  90. C The singular values (and their corresponding
  91. C singular vectors) S(INFO+1),S(INFO+2),...,S(M)
  92. C are correct (here M=MIN(N,P)). Thus if
  93. C INFO.EQ. 0, all the singular values and their
  94. C vectors are correct. In any event, the matrix
  95. C B = CTRANS(U)*X*V is the bidiagonal matrix
  96. C with the elements of S on its diagonal and the
  97. C elements of E on its super-diagonal (CTRANS(U)
  98. C is the conjugate-transpose of U). Thus the
  99. C singular values of X and B are the same.
  100. C
  101. C***REFERENCES J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W.
  102. C Stewart, LINPACK Users' Guide, SIAM, 1979.
  103. C***ROUTINES CALLED CAXPY, CDOTC, CSCAL, CSROT, CSWAP, SCNRM2, SROTG
  104. C***REVISION HISTORY (YYMMDD)
  105. C 790319 DATE WRITTEN
  106. C 890531 Changed all specific intrinsics to generic. (WRB)
  107. C 890531 REVISION DATE from Version 3.2
  108. C 891214 Prologue converted to Version 4.0 format. (BAB)
  109. C 900326 Removed duplicate information from DESCRIPTION section.
  110. C (WRB)
  111. C 920501 Reformatted the REFERENCES section. (WRB)
  112. C***END PROLOGUE CSVDC
  113. INTEGER LDX,N,P,LDU,LDV,JOB,INFO
  114. COMPLEX X(LDX,*),S(*),E(*),U(LDU,*),V(LDV,*),WORK(*)
  115. C
  116. C
  117. INTEGER I,ITER,J,JOBU,K,KASE,KK,L,LL,LLS,LM1,LP1,LS,LU,M,MAXIT,
  118. 1 MM,MM1,MP1,NCT,NCTP1,NCU,NRT,NRTP1
  119. COMPLEX CDOTC,T,R
  120. REAL B,C,CS,EL,EMM1,F,G,SCNRM2,SCALE,SHIFT,SL,SM,SN,SMM1,T1,TEST,
  121. 1 ZTEST
  122. LOGICAL WANTU,WANTV
  123. COMPLEX CSIGN,ZDUM,ZDUM1,ZDUM2
  124. REAL CABS1
  125. CABS1(ZDUM) = ABS(REAL(ZDUM)) + ABS(AIMAG(ZDUM))
  126. CSIGN(ZDUM1,ZDUM2) = ABS(ZDUM1)*(ZDUM2/ABS(ZDUM2))
  127. C***FIRST EXECUTABLE STATEMENT CSVDC
  128. C
  129. C SET THE MAXIMUM NUMBER OF ITERATIONS.
  130. C
  131. MAXIT = 30
  132. C
  133. C DETERMINE WHAT IS TO BE COMPUTED.
  134. C
  135. WANTU = .FALSE.
  136. WANTV = .FALSE.
  137. JOBU = MOD(JOB,100)/10
  138. NCU = N
  139. IF (JOBU .GT. 1) NCU = MIN(N,P)
  140. IF (JOBU .NE. 0) WANTU = .TRUE.
  141. IF (MOD(JOB,10) .NE. 0) WANTV = .TRUE.
  142. C
  143. C REDUCE X TO BIDIAGONAL FORM, STORING THE DIAGONAL ELEMENTS
  144. C IN S AND THE SUPER-DIAGONAL ELEMENTS IN E.
  145. C
  146. INFO = 0
  147. NCT = MIN(N-1,P)
  148. NRT = MAX(0,MIN(P-2,N))
  149. LU = MAX(NCT,NRT)
  150. IF (LU .LT. 1) GO TO 170
  151. DO 160 L = 1, LU
  152. LP1 = L + 1
  153. IF (L .GT. NCT) GO TO 20
  154. C
  155. C COMPUTE THE TRANSFORMATION FOR THE L-TH COLUMN AND
  156. C PLACE THE L-TH DIAGONAL IN S(L).
  157. C
  158. S(L) = CMPLX(SCNRM2(N-L+1,X(L,L),1),0.0E0)
  159. IF (CABS1(S(L)) .EQ. 0.0E0) GO TO 10
  160. IF (CABS1(X(L,L)) .NE. 0.0E0) S(L) = CSIGN(S(L),X(L,L))
  161. CALL CSCAL(N-L+1,1.0E0/S(L),X(L,L),1)
  162. X(L,L) = (1.0E0,0.0E0) + X(L,L)
  163. 10 CONTINUE
  164. S(L) = -S(L)
  165. 20 CONTINUE
  166. IF (P .LT. LP1) GO TO 50
  167. DO 40 J = LP1, P
  168. IF (L .GT. NCT) GO TO 30
  169. IF (CABS1(S(L)) .EQ. 0.0E0) GO TO 30
  170. C
  171. C APPLY THE TRANSFORMATION.
  172. C
  173. T = -CDOTC(N-L+1,X(L,L),1,X(L,J),1)/X(L,L)
  174. CALL CAXPY(N-L+1,T,X(L,L),1,X(L,J),1)
  175. 30 CONTINUE
  176. C
  177. C PLACE THE L-TH ROW OF X INTO E FOR THE
  178. C SUBSEQUENT CALCULATION OF THE ROW TRANSFORMATION.
  179. C
  180. E(J) = CONJG(X(L,J))
  181. 40 CONTINUE
  182. 50 CONTINUE
  183. IF (.NOT.WANTU .OR. L .GT. NCT) GO TO 70
  184. C
  185. C PLACE THE TRANSFORMATION IN U FOR SUBSEQUENT BACK
  186. C MULTIPLICATION.
  187. C
  188. DO 60 I = L, N
  189. U(I,L) = X(I,L)
  190. 60 CONTINUE
  191. 70 CONTINUE
  192. IF (L .GT. NRT) GO TO 150
  193. C
  194. C COMPUTE THE L-TH ROW TRANSFORMATION AND PLACE THE
  195. C L-TH SUPER-DIAGONAL IN E(L).
  196. C
  197. E(L) = CMPLX(SCNRM2(P-L,E(LP1),1),0.0E0)
  198. IF (CABS1(E(L)) .EQ. 0.0E0) GO TO 80
  199. IF (CABS1(E(LP1)) .NE. 0.0E0) E(L) = CSIGN(E(L),E(LP1))
  200. CALL CSCAL(P-L,1.0E0/E(L),E(LP1),1)
  201. E(LP1) = (1.0E0,0.0E0) + E(LP1)
  202. 80 CONTINUE
  203. E(L) = -CONJG(E(L))
  204. IF (LP1 .GT. N .OR. CABS1(E(L)) .EQ. 0.0E0) GO TO 120
  205. C
  206. C APPLY THE TRANSFORMATION.
  207. C
  208. DO 90 I = LP1, N
  209. WORK(I) = (0.0E0,0.0E0)
  210. 90 CONTINUE
  211. DO 100 J = LP1, P
  212. CALL CAXPY(N-L,E(J),X(LP1,J),1,WORK(LP1),1)
  213. 100 CONTINUE
  214. DO 110 J = LP1, P
  215. CALL CAXPY(N-L,CONJG(-E(J)/E(LP1)),WORK(LP1),1,
  216. 1 X(LP1,J),1)
  217. 110 CONTINUE
  218. 120 CONTINUE
  219. IF (.NOT.WANTV) GO TO 140
  220. C
  221. C PLACE THE TRANSFORMATION IN V FOR SUBSEQUENT
  222. C BACK MULTIPLICATION.
  223. C
  224. DO 130 I = LP1, P
  225. V(I,L) = E(I)
  226. 130 CONTINUE
  227. 140 CONTINUE
  228. 150 CONTINUE
  229. 160 CONTINUE
  230. 170 CONTINUE
  231. C
  232. C SET UP THE FINAL BIDIAGONAL MATRIX OR ORDER M.
  233. C
  234. M = MIN(P,N+1)
  235. NCTP1 = NCT + 1
  236. NRTP1 = NRT + 1
  237. IF (NCT .LT. P) S(NCTP1) = X(NCTP1,NCTP1)
  238. IF (N .LT. M) S(M) = (0.0E0,0.0E0)
  239. IF (NRTP1 .LT. M) E(NRTP1) = X(NRTP1,M)
  240. E(M) = (0.0E0,0.0E0)
  241. C
  242. C IF REQUIRED, GENERATE U.
  243. C
  244. IF (.NOT.WANTU) GO TO 300
  245. IF (NCU .LT. NCTP1) GO TO 200
  246. DO 190 J = NCTP1, NCU
  247. DO 180 I = 1, N
  248. U(I,J) = (0.0E0,0.0E0)
  249. 180 CONTINUE
  250. U(J,J) = (1.0E0,0.0E0)
  251. 190 CONTINUE
  252. 200 CONTINUE
  253. IF (NCT .LT. 1) GO TO 290
  254. DO 280 LL = 1, NCT
  255. L = NCT - LL + 1
  256. IF (CABS1(S(L)) .EQ. 0.0E0) GO TO 250
  257. LP1 = L + 1
  258. IF (NCU .LT. LP1) GO TO 220
  259. DO 210 J = LP1, NCU
  260. T = -CDOTC(N-L+1,U(L,L),1,U(L,J),1)/U(L,L)
  261. CALL CAXPY(N-L+1,T,U(L,L),1,U(L,J),1)
  262. 210 CONTINUE
  263. 220 CONTINUE
  264. CALL CSCAL(N-L+1,(-1.0E0,0.0E0),U(L,L),1)
  265. U(L,L) = (1.0E0,0.0E0) + U(L,L)
  266. LM1 = L - 1
  267. IF (LM1 .LT. 1) GO TO 240
  268. DO 230 I = 1, LM1
  269. U(I,L) = (0.0E0,0.0E0)
  270. 230 CONTINUE
  271. 240 CONTINUE
  272. GO TO 270
  273. 250 CONTINUE
  274. DO 260 I = 1, N
  275. U(I,L) = (0.0E0,0.0E0)
  276. 260 CONTINUE
  277. U(L,L) = (1.0E0,0.0E0)
  278. 270 CONTINUE
  279. 280 CONTINUE
  280. 290 CONTINUE
  281. 300 CONTINUE
  282. C
  283. C IF IT IS REQUIRED, GENERATE V.
  284. C
  285. IF (.NOT.WANTV) GO TO 350
  286. DO 340 LL = 1, P
  287. L = P - LL + 1
  288. LP1 = L + 1
  289. IF (L .GT. NRT) GO TO 320
  290. IF (CABS1(E(L)) .EQ. 0.0E0) GO TO 320
  291. DO 310 J = LP1, P
  292. T = -CDOTC(P-L,V(LP1,L),1,V(LP1,J),1)/V(LP1,L)
  293. CALL CAXPY(P-L,T,V(LP1,L),1,V(LP1,J),1)
  294. 310 CONTINUE
  295. 320 CONTINUE
  296. DO 330 I = 1, P
  297. V(I,L) = (0.0E0,0.0E0)
  298. 330 CONTINUE
  299. V(L,L) = (1.0E0,0.0E0)
  300. 340 CONTINUE
  301. 350 CONTINUE
  302. C
  303. C TRANSFORM S AND E SO THAT THEY ARE REAL.
  304. C
  305. DO 380 I = 1, M
  306. IF (CABS1(S(I)) .EQ. 0.0E0) GO TO 360
  307. T = CMPLX(ABS(S(I)),0.0E0)
  308. R = S(I)/T
  309. S(I) = T
  310. IF (I .LT. M) E(I) = E(I)/R
  311. IF (WANTU) CALL CSCAL(N,R,U(1,I),1)
  312. 360 CONTINUE
  313. IF (I .EQ. M) GO TO 390
  314. IF (CABS1(E(I)) .EQ. 0.0E0) GO TO 370
  315. T = CMPLX(ABS(E(I)),0.0E0)
  316. R = T/E(I)
  317. E(I) = T
  318. S(I+1) = S(I+1)*R
  319. IF (WANTV) CALL CSCAL(P,R,V(1,I+1),1)
  320. 370 CONTINUE
  321. 380 CONTINUE
  322. 390 CONTINUE
  323. C
  324. C MAIN ITERATION LOOP FOR THE SINGULAR VALUES.
  325. C
  326. MM = M
  327. ITER = 0
  328. 400 CONTINUE
  329. C
  330. C QUIT IF ALL THE SINGULAR VALUES HAVE BEEN FOUND.
  331. C
  332. IF (M .EQ. 0) GO TO 660
  333. C
  334. C IF TOO MANY ITERATIONS HAVE BEEN PERFORMED, SET
  335. C FLAG AND RETURN.
  336. C
  337. IF (ITER .LT. MAXIT) GO TO 410
  338. INFO = M
  339. GO TO 660
  340. 410 CONTINUE
  341. C
  342. C THIS SECTION OF THE PROGRAM INSPECTS FOR
  343. C NEGLIGIBLE ELEMENTS IN THE S AND E ARRAYS. ON
  344. C COMPLETION THE VARIABLES KASE AND L ARE SET AS FOLLOWS.
  345. C
  346. C KASE = 1 IF S(M) AND E(L-1) ARE NEGLIGIBLE AND L.LT.M
  347. C KASE = 2 IF S(L) IS NEGLIGIBLE AND L.LT.M
  348. C KASE = 3 IF E(L-1) IS NEGLIGIBLE, L.LT.M, AND
  349. C S(L), ..., S(M) ARE NOT NEGLIGIBLE (QR STEP).
  350. C KASE = 4 IF E(M-1) IS NEGLIGIBLE (CONVERGENCE).
  351. C
  352. DO 430 LL = 1, M
  353. L = M - LL
  354. IF (L .EQ. 0) GO TO 440
  355. TEST = ABS(S(L)) + ABS(S(L+1))
  356. ZTEST = TEST + ABS(E(L))
  357. IF (ZTEST .NE. TEST) GO TO 420
  358. E(L) = (0.0E0,0.0E0)
  359. GO TO 440
  360. 420 CONTINUE
  361. 430 CONTINUE
  362. 440 CONTINUE
  363. IF (L .NE. M - 1) GO TO 450
  364. KASE = 4
  365. GO TO 520
  366. 450 CONTINUE
  367. LP1 = L + 1
  368. MP1 = M + 1
  369. DO 470 LLS = LP1, MP1
  370. LS = M - LLS + LP1
  371. IF (LS .EQ. L) GO TO 480
  372. TEST = 0.0E0
  373. IF (LS .NE. M) TEST = TEST + ABS(E(LS))
  374. IF (LS .NE. L + 1) TEST = TEST + ABS(E(LS-1))
  375. ZTEST = TEST + ABS(S(LS))
  376. IF (ZTEST .NE. TEST) GO TO 460
  377. S(LS) = (0.0E0,0.0E0)
  378. GO TO 480
  379. 460 CONTINUE
  380. 470 CONTINUE
  381. 480 CONTINUE
  382. IF (LS .NE. L) GO TO 490
  383. KASE = 3
  384. GO TO 510
  385. 490 CONTINUE
  386. IF (LS .NE. M) GO TO 500
  387. KASE = 1
  388. GO TO 510
  389. 500 CONTINUE
  390. KASE = 2
  391. L = LS
  392. 510 CONTINUE
  393. 520 CONTINUE
  394. L = L + 1
  395. C
  396. C PERFORM THE TASK INDICATED BY KASE.
  397. C
  398. GO TO (530, 560, 580, 610), KASE
  399. C
  400. C DEFLATE NEGLIGIBLE S(M).
  401. C
  402. 530 CONTINUE
  403. MM1 = M - 1
  404. F = REAL(E(M-1))
  405. E(M-1) = (0.0E0,0.0E0)
  406. DO 550 KK = L, MM1
  407. K = MM1 - KK + L
  408. T1 = REAL(S(K))
  409. CALL SROTG(T1,F,CS,SN)
  410. S(K) = CMPLX(T1,0.0E0)
  411. IF (K .EQ. L) GO TO 540
  412. F = -SN*REAL(E(K-1))
  413. E(K-1) = CS*E(K-1)
  414. 540 CONTINUE
  415. IF (WANTV) CALL CSROT(P,V(1,K),1,V(1,M),1,CS,SN)
  416. 550 CONTINUE
  417. GO TO 650
  418. C
  419. C SPLIT AT NEGLIGIBLE S(L).
  420. C
  421. 560 CONTINUE
  422. F = REAL(E(L-1))
  423. E(L-1) = (0.0E0,0.0E0)
  424. DO 570 K = L, M
  425. T1 = REAL(S(K))
  426. CALL SROTG(T1,F,CS,SN)
  427. S(K) = CMPLX(T1,0.0E0)
  428. F = -SN*REAL(E(K))
  429. E(K) = CS*E(K)
  430. IF (WANTU) CALL CSROT(N,U(1,K),1,U(1,L-1),1,CS,SN)
  431. 570 CONTINUE
  432. GO TO 650
  433. C
  434. C PERFORM ONE QR STEP.
  435. C
  436. 580 CONTINUE
  437. C
  438. C CALCULATE THE SHIFT.
  439. C
  440. SCALE = MAX(ABS(S(M)),ABS(S(M-1)),ABS(E(M-1)),
  441. 1 ABS(S(L)),ABS(E(L)))
  442. SM = REAL(S(M))/SCALE
  443. SMM1 = REAL(S(M-1))/SCALE
  444. EMM1 = REAL(E(M-1))/SCALE
  445. SL = REAL(S(L))/SCALE
  446. EL = REAL(E(L))/SCALE
  447. B = ((SMM1 + SM)*(SMM1 - SM) + EMM1**2)/2.0E0
  448. C = (SM*EMM1)**2
  449. SHIFT = 0.0E0
  450. IF (B .EQ. 0.0E0 .AND. C .EQ. 0.0E0) GO TO 590
  451. SHIFT = SQRT(B**2+C)
  452. IF (B .LT. 0.0E0) SHIFT = -SHIFT
  453. SHIFT = C/(B + SHIFT)
  454. 590 CONTINUE
  455. F = (SL + SM)*(SL - SM) - SHIFT
  456. G = SL*EL
  457. C
  458. C CHASE ZEROS.
  459. C
  460. MM1 = M - 1
  461. DO 600 K = L, MM1
  462. CALL SROTG(F,G,CS,SN)
  463. IF (K .NE. L) E(K-1) = CMPLX(F,0.0E0)
  464. F = CS*REAL(S(K)) + SN*REAL(E(K))
  465. E(K) = CS*E(K) - SN*S(K)
  466. G = SN*REAL(S(K+1))
  467. S(K+1) = CS*S(K+1)
  468. IF (WANTV) CALL CSROT(P,V(1,K),1,V(1,K+1),1,CS,SN)
  469. CALL SROTG(F,G,CS,SN)
  470. S(K) = CMPLX(F,0.0E0)
  471. F = CS*REAL(E(K)) + SN*REAL(S(K+1))
  472. S(K+1) = -SN*E(K) + CS*S(K+1)
  473. G = SN*REAL(E(K+1))
  474. E(K+1) = CS*E(K+1)
  475. IF (WANTU .AND. K .LT. N)
  476. 1 CALL CSROT(N,U(1,K),1,U(1,K+1),1,CS,SN)
  477. 600 CONTINUE
  478. E(M-1) = CMPLX(F,0.0E0)
  479. ITER = ITER + 1
  480. GO TO 650
  481. C
  482. C CONVERGENCE.
  483. C
  484. 610 CONTINUE
  485. C
  486. C MAKE THE SINGULAR VALUE POSITIVE
  487. C
  488. IF (REAL(S(L)) .GE. 0.0E0) GO TO 620
  489. S(L) = -S(L)
  490. IF (WANTV) CALL CSCAL(P,(-1.0E0,0.0E0),V(1,L),1)
  491. 620 CONTINUE
  492. C
  493. C ORDER THE SINGULAR VALUE.
  494. C
  495. 630 IF (L .EQ. MM) GO TO 640
  496. IF (REAL(S(L)) .GE. REAL(S(L+1))) GO TO 640
  497. T = S(L)
  498. S(L) = S(L+1)
  499. S(L+1) = T
  500. IF (WANTV .AND. L .LT. P)
  501. 1 CALL CSWAP(P,V(1,L),1,V(1,L+1),1)
  502. IF (WANTU .AND. L .LT. N)
  503. 1 CALL CSWAP(N,U(1,L),1,U(1,L+1),1)
  504. L = L + 1
  505. GO TO 630
  506. 640 CONTINUE
  507. ITER = 0
  508. M = M - 1
  509. 650 CONTINUE
  510. GO TO 400
  511. 660 CONTINUE
  512. RETURN
  513. END