1c\BeginDoc 2c 3c\Name: cnaupd 4c 5c\Description: 6c Reverse communication interface for the Implicitly Restarted Arnoldi 7c iteration. This is intended to be used to find a few eigenpairs of a 8c complex linear operator OP with respect to a semi-inner product defined 9c by a hermitian positive semi-definite real matrix B. B may be the identity 10c matrix. NOTE: if both OP and B are real, then ssaupd or snaupd should 11c be used. 12c 13c 14c The computed approximate eigenvalues are called Ritz values and 15c the corresponding approximate eigenvectors are called Ritz vectors. 16c 17c cnaupd is usually called iteratively to solve one of the 18c following problems: 19c 20c Mode 1: A*x = lambda*x. 21c ===> OP = A and B = I. 22c 23c Mode 2: A*x = lambda*M*x, M hermitian positive definite 24c ===> OP = inv[M]*A and B = M. 25c ===> (If M can be factored see remark 3 below) 26c 27c Mode 3: A*x = lambda*M*x, M hermitian semi-definite 28c ===> OP = inv[A - sigma*M]*M and B = M. 29c ===> shift-and-invert mode 30c If OP*x = amu*x, then lambda = sigma + 1/amu. 31c 32c 33c NOTE: The action of w <- inv[A - sigma*M]*v or w <- inv[M]*v 34c should be accomplished either by a direct method 35c using a sparse matrix factorization and solving 36c 37c [A - sigma*M]*w = v or M*w = v, 38c 39c or through an iterative method for solving these 40c systems. If an iterative method is used, the 41c convergence test must be more stringent than 42c the accuracy requirements for the eigenvalue 43c approximations. 44c 45c\Usage: 46c call cnaupd 47c ( IDO, BMAT, N, WHICH, NEV, TOL, RESID, NCV, V, LDV, IPARAM, 48c IPNTR, WORKD, WORKL, LWORKL, RWORK, INFO ) 49c 50c\Arguments 51c IDO Integer. (INPUT/OUTPUT) 52c Reverse communication flag. IDO must be zero on the first 53c call to cnaupd. IDO will be set internally to 54c indicate the type of operation to be performed. Control is 55c then given back to the calling routine which has the 56c responsibility to carry out the requested operation and call 57c cnaupd with the result. The operand is given in 58c WORKD(IPNTR(1)), the result must be put in WORKD(IPNTR(2)). 59c ------------------------------------------------------------- 60c IDO = 0: first call to the reverse communication interface 61c IDO = -1: compute Y = OP * X where 62c IPNTR(1) is the pointer into WORKD for X, 63c IPNTR(2) is the pointer into WORKD for Y. 64c This is for the initialization phase to force the 65c starting vector into the range of OP. 66c IDO = 1: compute Y = OP * X where 67c IPNTR(1) is the pointer into WORKD for X, 68c IPNTR(2) is the pointer into WORKD for Y. 69c In mode 3, the vector B * X is already 70c available in WORKD(ipntr(3)). It does not 71c need to be recomputed in forming OP * X. 72c IDO = 2: compute Y = M * X where 73c IPNTR(1) is the pointer into WORKD for X, 74c IPNTR(2) is the pointer into WORKD for Y. 75c IDO = 3: compute and return the shifts in the first 76c NP locations of WORKL. 77c IDO = 99: done 78c ------------------------------------------------------------- 79c After the initialization phase, when the routine is used in 80c the "shift-and-invert" mode, the vector M * X is already 81c available and does not need to be recomputed in forming OP*X. 82c 83c BMAT Character*1. (INPUT) 84c BMAT specifies the type of the matrix B that defines the 85c semi-inner product for the operator OP. 86c BMAT = 'I' -> standard eigenvalue problem A*x = lambda*x 87c BMAT = 'G' -> generalized eigenvalue problem A*x = lambda*M*x 88c 89c N Integer. (INPUT) 90c Dimension of the eigenproblem. 91c 92c WHICH Character*2. (INPUT) 93c 'LM' -> want the NEV eigenvalues of largest magnitude. 94c 'SM' -> want the NEV eigenvalues of smallest magnitude. 95c 'LR' -> want the NEV eigenvalues of largest real part. 96c 'SR' -> want the NEV eigenvalues of smallest real part. 97c 'LI' -> want the NEV eigenvalues of largest imaginary part. 98c 'SI' -> want the NEV eigenvalues of smallest imaginary part. 99c 100c NEV Integer. (INPUT) 101c Number of eigenvalues of OP to be computed. 0 < NEV < N-1. 102c 103c TOL Real scalar. (INPUT) 104c Stopping criteria: the relative accuracy of the Ritz value 105c is considered acceptable if BOUNDS(I) .LE. TOL*ABS(RITZ(I)) 106c where ABS(RITZ(I)) is the magnitude when RITZ(I) is complex. 107c DEFAULT = slamch('EPS') (machine precision as computed 108c by the LAPACK auxiliary subroutine slamch). 109c 110c RESID Complex array of length N. (INPUT/OUTPUT) 111c On INPUT: 112c If INFO .EQ. 0, a random initial residual vector is used. 113c If INFO .NE. 0, RESID contains the initial residual vector, 114c possibly from a previous run. 115c On OUTPUT: 116c RESID contains the final residual vector. 117c 118c NCV Integer. (INPUT) 119c Number of columns of the matrix V. NCV must satisfy the two 120c inequalities 1 <= NCV-NEV and NCV <= N. 121c This will indicate how many Arnoldi vectors are generated 122c at each iteration. After the startup phase in which NEV 123c Arnoldi vectors are generated, the algorithm generates 124c approximately NCV-NEV Arnoldi vectors at each subsequent update 125c iteration. Most of the cost in generating each Arnoldi vector is 126c in the matrix-vector operation OP*x. (See remark 4 below.) 127c 128c V Complex array N by NCV. (OUTPUT) 129c Contains the final set of Arnoldi basis vectors. 130c 131c LDV Integer. (INPUT) 132c Leading dimension of V exactly as declared in the calling program. 133c 134c IPARAM Integer array of length 11. (INPUT/OUTPUT) 135c IPARAM(1) = ISHIFT: method for selecting the implicit shifts. 136c The shifts selected at each iteration are used to filter out 137c the components of the unwanted eigenvector. 138c ------------------------------------------------------------- 139c ISHIFT = 0: the shifts are to be provided by the user via 140c reverse communication. The NCV eigenvalues of 141c the Hessenberg matrix H are returned in the part 142c of WORKL array corresponding to RITZ. 143c ISHIFT = 1: exact shifts with respect to the current 144c Hessenberg matrix H. This is equivalent to 145c restarting the iteration from the beginning 146c after updating the starting vector with a linear 147c combination of Ritz vectors associated with the 148c "wanted" eigenvalues. 149c ISHIFT = 2: other choice of internal shift to be defined. 150c ------------------------------------------------------------- 151c 152c IPARAM(2) = No longer referenced 153c 154c IPARAM(3) = MXITER 155c On INPUT: maximum number of Arnoldi update iterations allowed. 156c On OUTPUT: actual number of Arnoldi update iterations taken. 157c 158c IPARAM(4) = NB: blocksize to be used in the recurrence. 159c The code currently works only for NB = 1. 160c 161c IPARAM(5) = NCONV: number of "converged" Ritz values. 162c This represents the number of Ritz values that satisfy 163c the convergence criterion. 164c 165c IPARAM(6) = IUPD 166c No longer referenced. Implicit restarting is ALWAYS used. 167c 168c IPARAM(7) = MODE 169c On INPUT determines what type of eigenproblem is being solved. 170c Must be 1,2,3; See under \Description of cnaupd for the 171c four modes available. 172c 173c IPARAM(8) = NP 174c When ido = 3 and the user provides shifts through reverse 175c communication (IPARAM(1)=0), _naupd returns NP, the number 176c of shifts the user is to provide. 0 < NP < NCV-NEV. 177c 178c IPARAM(9) = NUMOP, IPARAM(10) = NUMOPB, IPARAM(11) = NUMREO, 179c OUTPUT: NUMOP = total number of OP*x operations, 180c NUMOPB = total number of B*x operations if BMAT='G', 181c NUMREO = total number of steps of re-orthogonalization. 182c 183c IPNTR Integer array of length 14. (OUTPUT) 184c Pointer to mark the starting locations in the WORKD and WORKL 185c arrays for matrices/vectors used by the Arnoldi iteration. 186c ------------------------------------------------------------- 187c IPNTR(1): pointer to the current operand vector X in WORKD. 188c IPNTR(2): pointer to the current result vector Y in WORKD. 189c IPNTR(3): pointer to the vector B * X in WORKD when used in 190c the shift-and-invert mode. 191c IPNTR(4): pointer to the next available location in WORKL 192c that is untouched by the program. 193c IPNTR(5): pointer to the NCV by NCV upper Hessenberg 194c matrix H in WORKL. 195c IPNTR(6): pointer to the ritz value array RITZ 196c IPNTR(7): pointer to the (projected) ritz vector array Q 197c IPNTR(8): pointer to the error BOUNDS array in WORKL. 198c IPNTR(14): pointer to the NP shifts in WORKL. See Remark 5 below. 199c 200c Note: IPNTR(9:13) is only referenced by cneupd. See Remark 2 below. 201c 202c IPNTR(9): pointer to the NCV RITZ values of the 203c original system. 204c IPNTR(10): Not Used 205c IPNTR(11): pointer to the NCV corresponding error bounds. 206c IPNTR(12): pointer to the NCV by NCV upper triangular 207c Schur matrix for H. 208c IPNTR(13): pointer to the NCV by NCV matrix of eigenvectors 209c of the upper Hessenberg matrix H. Only referenced by 210c cneupd if RVEC = .TRUE. See Remark 2 below. 211c 212c ------------------------------------------------------------- 213c 214c WORKD Complex work array of length 3*N. (REVERSE COMMUNICATION) 215c Distributed array to be used in the basic Arnoldi iteration 216c for reverse communication. The user should not use WORKD 217c as temporary workspace during the iteration !!!!!!!!!! 218c See Data Distribution Note below. 219c 220c WORKL Complex work array of length LWORKL. (OUTPUT/WORKSPACE) 221c Private (replicated) array on each PE or array allocated on 222c the front end. See Data Distribution Note below. 223c 224c LWORKL Integer. (INPUT) 225c LWORKL must be at least 3*NCV**2 + 5*NCV. 226c 227c RWORK Real work array of length NCV (WORKSPACE) 228c Private (replicated) array on each PE or array allocated on 229c the front end. 230c 231c 232c INFO Integer. (INPUT/OUTPUT) 233c If INFO .EQ. 0, a randomly initial residual vector is used. 234c If INFO .NE. 0, RESID contains the initial residual vector, 235c possibly from a previous run. 236c Error flag on output. 237c = 0: Normal exit. 238c = 1: Maximum number of iterations taken. 239c All possible eigenvalues of OP has been found. IPARAM(5) 240c returns the number of wanted converged Ritz values. 241c = 2: No longer an informational error. Deprecated starting 242c with release 2 of ARPACK. 243c = 3: No shifts could be applied during a cycle of the 244c Implicitly restarted Arnoldi iteration. One possibility 245c is to increase the size of NCV relative to NEV. 246c See remark 4 below. 247c = -1: N must be positive. 248c = -2: NEV must be positive. 249c = -3: NCV-NEV >= 2 and less than or equal to N. 250c = -4: The maximum number of Arnoldi update iteration 251c must be greater than zero. 252c = -5: WHICH must be one of 'LM', 'SM', 'LR', 'SR', 'LI', 'SI' 253c = -6: BMAT must be one of 'I' or 'G'. 254c = -7: Length of private work array is not sufficient. 255c = -8: Error return from LAPACK eigenvalue calculation; 256c = -9: Starting vector is zero. 257c = -10: IPARAM(7) must be 1,2,3. 258c = -11: IPARAM(7) = 1 and BMAT = 'G' are incompatible. 259c = -12: IPARAM(1) must be equal to 0 or 1. 260c = -9999: Could not build an Arnoldi factorization. 261c User input error highly likely. Please 262c check actual array dimensions and layout. 263c IPARAM(5) returns the size of the current Arnoldi 264c factorization. 265c 266c\Remarks 267c 1. The computed Ritz values are approximate eigenvalues of OP. The 268c selection of WHICH should be made with this in mind when using 269c Mode = 3. When operating in Mode = 3 setting WHICH = 'LM' will 270c compute the NEV eigenvalues of the original problem that are 271c closest to the shift SIGMA . After convergence, approximate eigenvalues 272c of the original problem may be obtained with the ARPACK subroutine cneupd. 273c 274c 2. If a basis for the invariant subspace corresponding to the converged Ritz 275c values is needed, the user must call cneupd immediately following 276c completion of cnaupd. This is new starting with release 2 of ARPACK. 277c 278c 3. If M can be factored into a Cholesky factorization M = LL` 279c then Mode = 2 should not be selected. Instead one should use 280c Mode = 1 with OP = inv(L)*A*inv(L`). Appropriate triangular 281c linear systems should be solved with L and L` rather 282c than computing inverses. After convergence, an approximate 283c eigenvector z of the original problem is recovered by solving 284c L`z = x where x is a Ritz vector of OP. 285c 286c 4. At present there is no a-priori analysis to guide the selection 287c of NCV relative to NEV. The only formal requirement is that NCV > NEV + 1. 288c However, it is recommended that NCV .ge. 2*NEV. If many problems of 289c the same type are to be solved, one should experiment with increasing 290c NCV while keeping NEV fixed for a given test problem. This will 291c usually decrease the required number of OP*x operations but it 292c also increases the work and storage required to maintain the orthogonal 293c basis vectors. The optimal "cross-over" with respect to CPU time 294c is problem dependent and must be determined empirically. 295c See Chapter 8 of Reference 2 for further information. 296c 297c 5. When IPARAM(1) = 0, and IDO = 3, the user needs to provide the 298c NP = IPARAM(8) complex shifts in locations 299c WORKL(IPNTR(14)), WORKL(IPNTR(14)+1), ... , WORKL(IPNTR(14)+NP). 300c Eigenvalues of the current upper Hessenberg matrix are located in 301c WORKL(IPNTR(6)) through WORKL(IPNTR(6)+NCV-1). They are ordered 302c according to the order defined by WHICH. The associated Ritz estimates 303c are located in WORKL(IPNTR(8)), WORKL(IPNTR(8)+1), ... , 304c WORKL(IPNTR(8)+NCV-1). 305c 306c----------------------------------------------------------------------- 307c 308c\Data Distribution Note: 309c 310c Fortran-D syntax: 311c ================ 312c Complex resid(n), v(ldv,ncv), workd(3*n), workl(lworkl) 313c decompose d1(n), d2(n,ncv) 314c align resid(i) with d1(i) 315c align v(i,j) with d2(i,j) 316c align workd(i) with d1(i) range (1:n) 317c align workd(i) with d1(i-n) range (n+1:2*n) 318c align workd(i) with d1(i-2*n) range (2*n+1:3*n) 319c distribute d1(block), d2(block,:) 320c replicated workl(lworkl) 321c 322c Cray MPP syntax: 323c =============== 324c Complex resid(n), v(ldv,ncv), workd(n,3), workl(lworkl) 325c shared resid(block), v(block,:), workd(block,:) 326c replicated workl(lworkl) 327c 328c CM2/CM5 syntax: 329c ============== 330c 331c----------------------------------------------------------------------- 332c 333c include 'ex-nonsym.doc' 334c 335c----------------------------------------------------------------------- 336c 337c\BeginLib 338c 339c\Local variables: 340c xxxxxx Complex 341c 342c\References: 343c 1. D.C. Sorensen, "Implicit Application of Polynomial Filters in 344c a k-Step Arnoldi Method", SIAM J. Matr. Anal. Apps., 13 (1992), 345c pp 357-385. 346c 2. R.B. Lehoucq, "Analysis and Implementation of an Implicitly 347c Restarted Arnoldi Iteration", Rice University Technical Report 348c TR95-13, Department of Computational and Applied Mathematics. 349c 3. B.N. Parlett & Y. Saad, "_Complex_ Shift and Invert Strategies for 350c _Real_ Matrices", Linear Algebra and its Applications, vol 88/89, 351c pp 575-595, (1987). 352c 353c\Routines called: 354c cnaup2 ARPACK routine that implements the Implicitly Restarted 355c Arnoldi Iteration. 356c cstatn ARPACK routine that initializes the timing variables. 357c ivout ARPACK utility routine that prints integers. 358c cvout ARPACK utility routine that prints vectors. 359c arscnd ARPACK utility routine for timing. 360c slamch LAPACK routine that determines machine constants. 361c 362c\Author 363c Danny Sorensen Phuong Vu 364c Richard Lehoucq CRPC / Rice University 365c Dept. of Computational & Houston, Texas 366c Applied Mathematics 367c Rice University 368c Houston, Texas 369c 370c\SCCS Information: @(#) 371c FILE: naupd.F SID: 2.8 DATE OF SID: 04/10/01 RELEASE: 2 372c 373c\Remarks 374c 375c\EndLib 376c 377c----------------------------------------------------------------------- 378c 379 subroutine cnaupd 380 & ( ido, bmat, n, which, nev, tol, resid, ncv, v, ldv, iparam, 381 & ipntr, workd, workl, lworkl, rwork, info ) 382c 383c %----------------------------------------------------% 384c | Include files for debugging and timing information | 385c %----------------------------------------------------% 386c 387 include 'debug.h' 388 include 'stat.h' 389c 390c %------------------% 391c | Scalar Arguments | 392c %------------------% 393c 394 character bmat*1, which*2 395 integer ido, info, ldv, lworkl, n, ncv, nev 396 Real 397 & tol 398c 399c %-----------------% 400c | Array Arguments | 401c %-----------------% 402c 403 integer iparam(11), ipntr(14) 404 Complex 405 & resid(n), v(ldv,ncv), workd(3*n), workl(lworkl) 406 Real 407 & rwork(ncv) 408c 409c %------------% 410c | Parameters | 411c %------------% 412c 413 Complex 414 & one, zero 415 parameter (one = (1.0E+0, 0.0E+0) , zero = (0.0E+0, 0.0E+0) ) 416c 417c %---------------% 418c | Local Scalars | 419c %---------------% 420c 421 integer bounds, ierr, ih, iq, ishift, iupd, iw, 422 & ldh, ldq, levec, mode, msglvl, mxiter, nb, 423 & nev0, next, np, ritz, j 424 save bounds, ih, iq, ishift, iupd, iw, 425 & ldh, ldq, levec, mode, msglvl, mxiter, nb, 426 & nev0, next, np, ritz 427c 428c %----------------------% 429c | External Subroutines | 430c %----------------------% 431c 432 external cnaup2, cvout, ivout, arscnd, cstatn 433c 434c %--------------------% 435c | External Functions | 436c %--------------------% 437c 438 Real 439 & slamch 440 external slamch 441c 442c %-----------------------% 443c | Executable Statements | 444c %-----------------------% 445c 446 if (ido .eq. 0) then 447c 448c %-------------------------------% 449c | Initialize timing statistics | 450c | & message level for debugging | 451c %-------------------------------% 452c 453 call cstatn 454 call arscnd (t0) 455 msglvl = mcaupd 456c 457c %----------------% 458c | Error checking | 459c %----------------% 460c 461 ierr = 0 462 ishift = iparam(1) 463c levec = iparam(2) 464 mxiter = iparam(3) 465c nb = iparam(4) 466 nb = 1 467c 468c %--------------------------------------------% 469c | Revision 2 performs only implicit restart. | 470c %--------------------------------------------% 471c 472 iupd = 1 473 mode = iparam(7) 474c 475 if (n .le. 0) then 476 ierr = -1 477 else if (nev .le. 0) then 478 ierr = -2 479 else if (ncv .le. nev .or. ncv .gt. n) then 480 ierr = -3 481 else if (mxiter .le. 0) then 482 ierr = -4 483 else if (which .ne. 'LM' .and. 484 & which .ne. 'SM' .and. 485 & which .ne. 'LR' .and. 486 & which .ne. 'SR' .and. 487 & which .ne. 'LI' .and. 488 & which .ne. 'SI') then 489 ierr = -5 490 else if (bmat .ne. 'I' .and. bmat .ne. 'G') then 491 ierr = -6 492 else if (lworkl .lt. 3*ncv**2 + 5*ncv) then 493 ierr = -7 494 else if (mode .lt. 1 .or. mode .gt. 3) then 495 ierr = -10 496 else if (mode .eq. 1 .and. bmat .eq. 'G') then 497 ierr = -11 498 end if 499c 500c %------------% 501c | Error Exit | 502c %------------% 503c 504 if (ierr .ne. 0) then 505 info = ierr 506 ido = 99 507 go to 9000 508 end if 509c 510c %------------------------% 511c | Set default parameters | 512c %------------------------% 513c 514 if (nb .le. 0) nb = 1 515 if (tol .le. 0.0E+0 ) tol = slamch('EpsMach') 516 if (ishift .ne. 0 .and. 517 & ishift .ne. 1 .and. 518 & ishift .ne. 2) ishift = 1 519c 520c %----------------------------------------------% 521c | NP is the number of additional steps to | 522c | extend the length NEV Lanczos factorization. | 523c | NEV0 is the local variable designating the | 524c | size of the invariant subspace desired. | 525c %----------------------------------------------% 526c 527 np = ncv - nev 528 nev0 = nev 529c 530c %-----------------------------% 531c | Zero out internal workspace | 532c %-----------------------------% 533c 534 do 10 j = 1, 3*ncv**2 + 5*ncv 535 workl(j) = zero 536 10 continue 537c 538c %-------------------------------------------------------------% 539c | Pointer into WORKL for address of H, RITZ, BOUNDS, Q | 540c | etc... and the remaining workspace. | 541c | Also update pointer to be used on output. | 542c | Memory is laid out as follows: | 543c | workl(1:ncv*ncv) := generated Hessenberg matrix | 544c | workl(ncv*ncv+1:ncv*ncv+ncv) := the ritz values | 545c | workl(ncv*ncv+ncv+1:ncv*ncv+2*ncv) := error bounds | 546c | workl(ncv*ncv+2*ncv+1:2*ncv*ncv+2*ncv) := rotation matrix Q | 547c | workl(2*ncv*ncv+2*ncv+1:3*ncv*ncv+5*ncv) := workspace | 548c | The final workspace is needed by subroutine cneigh called | 549c | by cnaup2. Subroutine cneigh calls LAPACK routines for | 550c | calculating eigenvalues and the last row of the eigenvector | 551c | matrix. | 552c %-------------------------------------------------------------% 553c 554 ldh = ncv 555 ldq = ncv 556 ih = 1 557 ritz = ih + ldh*ncv 558 bounds = ritz + ncv 559 iq = bounds + ncv 560 iw = iq + ldq*ncv 561 next = iw + ncv**2 + 3*ncv 562c 563 ipntr(4) = next 564 ipntr(5) = ih 565 ipntr(6) = ritz 566 ipntr(7) = iq 567 ipntr(8) = bounds 568 ipntr(14) = iw 569 end if 570c 571c %-------------------------------------------------------% 572c | Carry out the Implicitly restarted Arnoldi Iteration. | 573c %-------------------------------------------------------% 574c 575 call cnaup2 576 & ( ido, bmat, n, which, nev0, np, tol, resid, mode, iupd, 577 & ishift, mxiter, v, ldv, workl(ih), ldh, workl(ritz), 578 & workl(bounds), workl(iq), ldq, workl(iw), 579 & ipntr, workd, rwork, info ) 580c 581c %--------------------------------------------------% 582c | ido .ne. 99 implies use of reverse communication | 583c | to compute operations involving OP. | 584c %--------------------------------------------------% 585c 586 if (ido .eq. 3) iparam(8) = np 587 if (ido .ne. 99) go to 9000 588c 589 iparam(3) = mxiter 590 iparam(5) = np 591 iparam(9) = nopx 592 iparam(10) = nbx 593 iparam(11) = nrorth 594c 595c %------------------------------------% 596c | Exit if there was an informational | 597c | error within cnaup2. | 598c %------------------------------------% 599c 600 if (info .lt. 0) go to 9000 601 if (info .eq. 2) info = 3 602c 603 if (msglvl .gt. 0) then 604 call ivout (logfil, 1, [mxiter], ndigit, 605 & '_naupd: Number of update iterations taken') 606 call ivout (logfil, 1, [np], ndigit, 607 & '_naupd: Number of wanted "converged" Ritz values') 608 call cvout (logfil, np, workl(ritz), ndigit, 609 & '_naupd: The final Ritz values') 610 call cvout (logfil, np, workl(bounds), ndigit, 611 & '_naupd: Associated Ritz estimates') 612 end if 613c 614 call arscnd (t1) 615 tcaupd = t1 - t0 616c 617 if (msglvl .gt. 0) then 618c 619c %--------------------------------------------------------% 620c | Version Number & Version Date are defined in version.h | 621c %--------------------------------------------------------% 622c 623 write (6,1000) 624 write (6,1100) mxiter, nopx, nbx, nrorth, nitref, nrstrt, 625 & tmvopx, tmvbx, tcaupd, tcaup2, tcaitr, titref, 626 & tgetv0, tceigh, tcgets, tcapps, tcconv, trvec 627 1000 format (//, 628 & 5x, '=============================================',/ 629 & 5x, '= Complex implicit Arnoldi update code =',/ 630 & 5x, '= Version Number: ', ' 2.3' , 21x, ' =',/ 631 & 5x, '= Version Date: ', ' 07/31/96' , 16x, ' =',/ 632 & 5x, '=============================================',/ 633 & 5x, '= Summary of timing statistics =',/ 634 & 5x, '=============================================',//) 635 1100 format ( 636 & 5x, 'Total number update iterations = ', i5,/ 637 & 5x, 'Total number of OP*x operations = ', i5,/ 638 & 5x, 'Total number of B*x operations = ', i5,/ 639 & 5x, 'Total number of reorthogonalization steps = ', i5,/ 640 & 5x, 'Total number of iterative refinement steps = ', i5,/ 641 & 5x, 'Total number of restart steps = ', i5,/ 642 & 5x, 'Total time in user OP*x operation = ', f12.6,/ 643 & 5x, 'Total time in user B*x operation = ', f12.6,/ 644 & 5x, 'Total time in Arnoldi update routine = ', f12.6,/ 645 & 5x, 'Total time in naup2 routine = ', f12.6,/ 646 & 5x, 'Total time in basic Arnoldi iteration loop = ', f12.6,/ 647 & 5x, 'Total time in reorthogonalization phase = ', f12.6,/ 648 & 5x, 'Total time in (re)start vector generation = ', f12.6,/ 649 & 5x, 'Total time in Hessenberg eig. subproblem = ', f12.6,/ 650 & 5x, 'Total time in getting the shifts = ', f12.6,/ 651 & 5x, 'Total time in applying the shifts = ', f12.6,/ 652 & 5x, 'Total time in convergence testing = ', f12.6,/ 653 & 5x, 'Total time in computing final Ritz vectors = ', f12.6/) 654 end if 655c 656 9000 continue 657c 658 return 659c 660c %---------------% 661c | End of cnaupd | 662c %---------------% 663c 664 end 665