| Line 67... |
Line 67... |
Spectral Transformation & \ident{STType} & {\footnotesize Name} & Operator \\\hline
|
Spectral Transformation & \ident{STType} & {\footnotesize Name} & Operator \\\hline
|
Shift of Origin & \texttt{STSHIFT} & \texttt{shift} & $B^{-1}A+\sigma I$\\
|
Shift of Origin & \texttt{STSHIFT} & \texttt{shift} & $B^{-1}A+\sigma I$\\
|
Spectrum Folding & \texttt{STFOLD} & \texttt{fold} & $(B^{-1}A-\sigma I)^2$\\
|
Spectrum Folding & \texttt{STFOLD} & \texttt{fold} & $(B^{-1}A-\sigma I)^2$\\
|
Shift-and-invert & \texttt{STSINVERT}& \texttt{sinvert} & $(A-\sigma B)^{-1}B$\\
|
Shift-and-invert & \texttt{STSINVERT}& \texttt{sinvert} & $(A-\sigma B)^{-1}B$\\
|
Generalized Cayley & \texttt{STCAYLEY} & \texttt{cayley} & $(A-\sigma B)^{-1}(A+\nu B)$\\
|
Generalized Cayley & \texttt{STCAYLEY} & \texttt{cayley} & $(A-\sigma B)^{-1}(A+\nu B)$\\
|
|
Preconditioner & \texttt{STPRECOND}& \texttt{precond} & $K^{-1}\approx(A-\sigma B)^{-1}$\\\hline
|
|
|
\end{tabular} }
|
\end{tabular} }
|
\caption{\label{tab:transforms}Spectral transformations available in the \ident{ST} package. }
|
\caption{\label{tab:transforms}Spectral transformations available in the \ident{ST} package. }
|
\end{table}
|
\end{table}
|
|
|
| Line 92... |
Line 92... |
|
|
& $\sigma\not=0,\nu=0$ & $(A-\sigma I)^{-1}A$ & $(A-\sigma B)^{-1}A$ \\
|
& $\sigma\not=0,\nu=0$ & $(A-\sigma I)^{-1}A$ & $(A-\sigma B)^{-1}A$ \\
|
& $\sigma=0,\nu\not=0$ & $I+\nu A^{-1}$ & $I+\nu A^{-1}B$ \\
|
& $\sigma=0,\nu\not=0$ & $I+\nu A^{-1}$ & $I+\nu A^{-1}B$ \\
|
& $\sigma\not=0,\nu\not=0$ & $(A-\sigma I)^{-1}(A+\nu I)$ & $(A-\sigma B)^{-1}(A+\nu B)$ \\ \hline
|
& $\sigma\not=0,\nu\not=0$ & $(A-\sigma I)^{-1}(A+\nu I)$ & $(A-\sigma B)^{-1}(A+\nu B)$ \\ \hline
|
|
|
& $\sigma=0$ & $A$ & $A$ \\
|
& $\sigma=0$ & $K^{-1}\approx A^{-1}$ & $K^{-1}\approx A^{-1}$ \\
|
& $\sigma\not=0$ & $A-\sigma I$ & $A-\sigma B$ \\ \hline
|
& $\sigma\not=0$ & $K^{-1}\approx(A-\sigma I)^{-1}$ & $K^{-1}\approx(A-\sigma B)^{-1}$ \\ \hline
|
\end{tabular} }
|
\end{tabular} }
|
\caption{\label{tab:op}Operators used in each spectral transformation mode. }
|
\caption{\label{tab:op}Operators used in each spectral transformation mode. }
|
\end{table}
|
\end{table}
|
|
|
The expressions shown in Table \ref{tab:op} are not built explicitly. Instead, the appropriate operations are carried out when applying the operator to a certain vector. The inverses imply the solution of a linear system of equations that is managed by setting up an associated \ident{KSP} object. The user can control the behavior of this object by adjusting the appropriate options, as will be illustrated with examples in \S\ref{sec:lin}.
|
The expressions shown in Table \ref{tab:op} are not built explicitly. Instead, the appropriate operations are carried out when applying the operator to a certain vector. The inverses imply the solution of a linear system of equations that is managed by setting up an associated \ident{KSP} object. The user can control the behavior of this object by adjusting the appropriate options, as will be illustrated with examples in \S\ref{sec:lin}.
|
| Line 206... |
Line 206... |
In this case, the relation between the eigenvalues of both problems is
|
In this case, the relation between the eigenvalues of both problems is
|
\begin{equation}\theta=(\lambda+\nu)/(\lambda-\sigma)\;\;.\end{equation}
|
\begin{equation}\theta=(\lambda+\nu)/(\lambda-\sigma)\;\;.\end{equation}
|
Therefore, after the solution process, the operation to be performed in function \ident{STBackTransform} is $\lambda=(\theta\sigma+\nu)/(\theta-1)$ for each of the computed eigenvalues.
|
Therefore, after the solution process, the operation to be performed in function \ident{STBackTransform} is $\lambda=(\theta\sigma+\nu)/(\theta-1)$ for each of the computed eigenvalues.
|
|
|
|
|
|
|
|
|
As mentioned in the introduction of this chapter, the special type \ident{STPRECOND} is used for handling preconditioners or preconditioned iterative linear solvers, which are used in the context of preconditioned eigensolvers for expanding the subspace. For instance, in the GD solver the so-called correction vector $d_i$ to be added to the subspace in each iteration is computed as
|
As mentioned in the introduction of this chapter, the special type \ident{STPRECOND} is used for handling preconditioners or preconditioned iterative linear solvers, which are used in the context of preconditioned eigensolvers for expanding the subspace. For instance, in the GD solver the so-called correction vector $d_i$ to be added to the subspace in each iteration is computed as
|
\begin{equation}
|
|
d_i=K^{-1}(A-\theta_i B)x_i,
|
|
\end{equation}
|
|
or sometimes as
|
|
\begin{equation}
|
\begin{equation}
|
d_i=K^{-1}P_i(A-\theta_i B)x_i,
|
d_i=K^{-1}P_i(A-\theta_i B)x_i,
|
\end{equation}
|
\end{equation}
|
where $(\theta_i,x_i)$ is the current approximation of the sought-after eigenpair, and $P_i$ is a projector involving $x_i$ and $K^{-1}x_i$. In the above expressions, $K$ is a preconditioner matrix that is built from $A-\theta_i B$. However, since $\theta_i$ changes at each iteration, which would force recomputation of the preconditioner, we opt for using
|
where $(\theta_i,x_i)$ is the current approximation of the sought-after eigenpair, and $P_i$ is a projector involving $x_i$ and $K^{-1}x_i$. In the above expressions, $K$ is a preconditioner matrix that is built from $A-\theta_i B$. However, since $\theta_i$ changes at each iteration, which would force recomputation of the preconditioner, we opt for using
|
\begin{equation}
|
\begin{equation}
|
|
|
K\approx A-\sigma B.
|
K^{-1}\approx (A-\sigma B)^{-1}.
|
\end{equation}
|
\end{equation}
|
|
|
Similarly, in the JD eigensolver the expansion of the subspace is carried out by solving the correction equation
|
Similarly, in the JD eigensolver the expansion of the subspace is carried out by solving a correction equation similar to
|
\begin{equation}
|
\begin{equation}
|
(I-x_ix_i^*)(A-\theta_i B)(I-x_ix_i^*)d_i=-(A-\theta_i B)x_i,
|
(I-x_ix_i^*)(A-\theta_i B)(I-x_ix_i^*)d_i=-(A-\theta_i B)x_i,
|
\end{equation}
|
\end{equation}
|
or a similar one, where the system is solved approximately with a preconditioned iterative linear solver. For building the preconditioner of this linear system, the projectors $I-x_ix_i^*$ are ignored, and again it is not recomputed in each iteration. Therefore, the preconditioner is built as in expression \ref{eq:precon} as well.
|
where the system is solved approximately with a preconditioned iterative linear solver. For building the preconditioner of this linear system, the projectors $I-x_ix_i^*$ are ignored, and again it is not recomputed in each iteration. Therefore, the preconditioner is built as in expression \ref{eq:precon} as well.
|
|
|
It should be clear from the previous discussion, that \ident{STPRECOND} does not work in the same way as the rest of spectral transformations. In particular, it is not intended to be used on the basis of operator applications with \ident{STApply}, and it does not rely on \ident{STBackTransform} either. It is rather a convenient mechanism for handling the preconditioner and linear solver (see examples in \S\ref{sec:lin}). The expressions shown in Tables \ref{tab:transforms} and \ref{tab:op} are just a reference to indicate from which matrix the preconditioner is built by default.
|
It should be clear from the previous discussion, that \ident{STPRECOND} does not work in the same way as the rest of spectral transformations. In particular, it is not intended to be used on the basis of operator applications with \ident{STApply}, and it does not rely on \ident{STBackTransform} either. It is rather a convenient mechanism for handling the preconditioner and linear solver (see examples in \S\ref{sec:lin}). The expressions shown in Tables \ref{tab:transforms} and \ref{tab:op} are just a reference to indicate from which matrix the preconditioner is built by default.
|
|
|
There is the possibility that the user overrides the default behaviour, that is, to explicitly supply a matrix from which the preconditioner is to be built, with
|
There is the possibility that the user overrides the default behaviour, that is, to explicitly supply a matrix from which the preconditioner is to be built, with
|
\findex{STPrecondSetMatForPC}
|
\findex{STPrecondSetMatForPC}
|