The problem set up is similar for all of the available computational modes. In the previous section, a detailed description of the reverse communication loop for a specific mode (Shift-Invert for a Real Non-symmetric Generalized Problem) was given. To use this or any of the other modes listed below, the user is strongly urged to modify one of the driver routine templates as described in Appendix A.
The first thing to decide is whether the problem will require a spectral transformation. If the problem is generalized () then a spectral transformation will be required (see § 3.2). Such a transformation will most likely be needed for a standard problem if the desired eigenvalues are in the interior of the spectrum or if they are clustered at the desired part of the spectrum. Once this decision has been made and OP has been specified, an efficient means to implement the action of the operator OP on a vector must be devised. The expense of applying OP to a vector will of course have direct impact on performance.
Shift-Invert spectral transformations may be implemented with or without the use of a weighted -inner product. The relation between the eigenvalues of OP and the eigenvalues of the original problem must also be understood in order to make the appropriate specification of which in order to recover eigenvalues of interest for the original problem. The user must specify the number of eigenvalues to compute, which eigenvalues are of interest, the number of basis vectors to use, and whether or not the problem is standard or generalized. These items are controlled with the parameters listed in Table 2.2 of Chapter 2.
Setting nev and ncv for optimal performance is very much problem dependent. If possible, it is best to avoid setting nev in a way that will split clusters of eigenvalues. As a rule of thumb, is reasonable. There are tradeoffs due to the cost of the user supplied matrix-vector products and the cost of the implicit restart mechanism. If the user supplied matrix-vector product is relatively cheap, then a smaller value of ncv may lead to more user matrix-vector products and IRA iterations but an overall decrease in computation time. Convergence behavior can be quite different for various settings of the which parameter. The Arnoldi process tends to converge most rapidly to extreme points of the convex hull of the spectrum. Implicit restarting can be effective in focusing on and isolating a selected set of eigenvalues near these extremes. In principle, implicit restarting could isolate eigenvalues in the interior, but in practice this is difficult and usually unsuccessful. If one is interested in eigenvalues near a point that is in the interior of the convex hull of the spectrum, a shift-invert strategy is usually required for reasonable convergence.
call dnaupd (ido, bmat, n, which, nev, tol, resid, ncv, v,
& ldv, iparam, ipntr, workd, workl, lworkl, info)
The call to dnaupd is listed in Figure 3.3. The integer ido is the reverse communication flag that will specify a requested action on return from dnaupd. The character*1 parameter bmat specifies if this is a standard bmat = `I' or a generalized bmat = `G' problem. The integer n specifies the dimension of the problem. The character*2 parameter which specifies the nev eigenvalues to be computed. The options for which differ depending on whether a Hermitian or non-Hermitian eigenvalue problem is to be solved. Tables 3.3-3.4 list the different selections possible. The specification of problem type will be described separately but the reverse communication interface and loop structure is the same for each type of the three basic modes regular, regular-inverse, shift-invert (standard or generalized). There are some additional specialized modes for symmetric problems (Buckling and Cayley ) and for real non-symmetric problems with complex shifts applied in real arithmetic. The user is encouraged to examine the sample driver routines for these modes.
The integer nev indicates the number of eigenvalues to compute and tol specifies the accuracy requested. The integer array iparam has eleven entries. On input, iparam(1) should be set to 0 if the user wishes to supply shifts for implicit restarting or to 1 if the default exact-shift strategy is requested. The entry iparam(1) should be set to 1 unless the user has a great deal of knowledge about the spectrum and about the IRAM and underlying theory. The entry iparam(3) should be set to the maximum number of implicit restarts allowed. The cost of an implicit restart step (major iteration) is on the order of Flops for the dense matrix operations and ncv - nev matrix-vector products with the matrix On output, iparam(3) will contain the number of implicit restarts taken during the computation.
With respect to shift-invert modes, entry iparam(7) is very important. The remaining entries of iparam are either no longer referenced or are output parameters. The legitimate values for iparam(7) differ with each problem type and will be listed below for each of them.