10 continue c c %---------------------------------------------% c | Repeatedly call the routine DSAUPD and take | c | actions indicated by parameter IDO until | c | either convergence is indicated or maxitr | c | has been exceeded. | c %---------------------------------------------% c call dsaupd ( ido, bmat, n, which, nev, tol, resid, & ncv, v, ldv, iparam, ipntr, workd, workl, & lworkl, info ) c if (ido .eq. -1) then c w <--- OP*v c c % ----- L O O P \hspace{.05in} B A C K to call DSAUPD again. ----- % c goto 10 c else if ( ido .eq. 1 ) then c w <--- OP*v c c % ----- L O O P \hspace{.05in} B A C K to call DSAUPD again. ----- % c goto 10 c else if ( ido .eq. 2 ) then c w <--- B*v c c % ----- L O O P \hspace{.05in} B A C K to call DSAUPD again. ----- % c goto 10 c end if |
The specific actions to be taken within the reverse communication loop vary with each of the different drivers. Each action in Figure A.1 corresponds to an ido value returned from the call to dsaupd. These actions involve matrix vector operations such as and The matrix vector operation must be performed on the correct portion of the work array workd. Below, we list the the specific matrix-vector operations that must be performed in each driver for a given returned value of the reverse communication parameter ido.