deal.II version GIT relicensing-2072-gfa95b42947 2024-11-02 03:10:00+00:00
|
#include <deal.II/lac/slepc_solver.h>
Public Member Functions | |
SolverBase (SolverControl &cn, const MPI_Comm mpi_communicator) | |
virtual | ~SolverBase () |
template<typename OutputVector > | |
void | solve (const PETScWrappers::MatrixBase &A, std::vector< PetscScalar > &eigenvalues, std::vector< OutputVector > &eigenvectors, const unsigned int n_eigenpairs=1) |
template<typename OutputVector > | |
void | solve (const PETScWrappers::MatrixBase &A, const PETScWrappers::MatrixBase &B, std::vector< PetscScalar > &eigenvalues, std::vector< OutputVector > &eigenvectors, const unsigned int n_eigenpairs=1) |
template<typename OutputVector > | |
void | solve (const PETScWrappers::MatrixBase &A, const PETScWrappers::MatrixBase &B, std::vector< double > &real_eigenvalues, std::vector< double > &imag_eigenvalues, std::vector< OutputVector > &real_eigenvectors, std::vector< OutputVector > &imag_eigenvectors, const unsigned int n_eigenpairs=1) |
template<typename Vector > | |
void | set_initial_space (const std::vector< Vector > &initial_space) |
void | set_transformation (SLEPcWrappers::TransformationBase &this_transformation) |
void | set_target_eigenvalue (const PetscScalar &this_target) |
void | set_which_eigenpairs (EPSWhich set_which) |
void | set_problem_type (EPSProblemType set_problem) |
void | get_solver_state (const SolverControl::State state) |
SolverControl & | control () const |
template<typename VectorType > | |
void | set_initial_space (const std::vector< VectorType > &this_initial_space) |
Static Public Member Functions | |
static ::ExceptionBase & | ExcSLEPcWrappersUsageError () |
static ::ExceptionBase & | ExcSLEPcError (int arg1) |
static ::ExceptionBase & | ExcSLEPcEigenvectorConvergenceMismatchError (int arg1, int arg2) |
Protected Member Functions | |
void | solve (const unsigned int n_eigenpairs, unsigned int *n_converged) |
void | get_eigenpair (const unsigned int index, PetscScalar &eigenvalues, PETScWrappers::VectorBase &eigenvectors) |
void | get_eigenpair (const unsigned int index, double &real_eigenvalues, double &imag_eigenvalues, PETScWrappers::VectorBase &real_eigenvectors, PETScWrappers::VectorBase &imag_eigenvectors) |
void | set_matrices (const PETScWrappers::MatrixBase &A) |
void | set_matrices (const PETScWrappers::MatrixBase &A, const PETScWrappers::MatrixBase &B) |
Protected Attributes | |
SolverControl & | solver_control |
const MPI_Comm | mpi_communicator |
EPS | eps |
Static Private Member Functions | |
static int | convergence_test (EPS eps, PetscScalar real_eigenvalue, PetscScalar imag_eigenvalue, PetscReal residual_norm, PetscReal *estimated_error, void *solver_control) |
Private Attributes | |
EPSConvergedReason | reason |
Base class for solver classes using the SLEPc solvers. Since solvers in SLEPc are selected based on flags passed to a generic solver object, basically all the actual solver calls happen in this class, and derived classes simply set the right flags to select one solver or another, or to set certain parameters for individual solvers.
For examples of how this and its derived classes can be used, including how to provide preconditioners to the matrix of which eigenvalues are to be computed, see the documentation of the SolverBase class as well as the extensive discussions in the documentation of the SLEPcWrappers namespace.
Definition at line 145 of file slepc_solver.h.
SolverBase< VectorType >::SolverBase | ( | SolverControl & | cn, |
const MPI_Comm | mpi_communicator | ||
) |
Constructor. Takes the MPI communicator over which parallel computations are to happen.
Definition at line 34 of file slepc_solver.cc.
|
virtual |
Destructor.
Definition at line 61 of file slepc_solver.cc.
void SolverBase< OutputVector >::solve | ( | const PETScWrappers::MatrixBase & | A, |
std::vector< PetscScalar > & | eigenvalues, | ||
std::vector< OutputVector > & | eigenvectors, | ||
const unsigned int | n_eigenpairs = 1 |
||
) |
Composite method that solves the eigensystem \(Ax=\lambda x\). The eigenvector sent in has to have at least one element that we can use as a template when resizing, since we do not know the parameters of the specific vector class used (i.e. local_dofs for MPI vectors). However, while copying eigenvectors, at least twice the memory size of eigenvectors
is being used (and can be more). To avoid doing this, the fairly standard calling sequence executed here is used: Set up matrices for solving; Actually solve the system; Gather the solution(s).
This is declared here to make it possible to take a std::vector of different PETScWrappers vector types
Definition at line 705 of file slepc_solver.h.
void SolverBase< OutputVector >::solve | ( | const PETScWrappers::MatrixBase & | A, |
const PETScWrappers::MatrixBase & | B, | ||
std::vector< PetscScalar > & | eigenvalues, | ||
std::vector< OutputVector > & | eigenvectors, | ||
const unsigned int | n_eigenpairs = 1 |
||
) |
Same as above, but here a composite method for solving the system \(A x=\lambda B x\), for real matrices, vectors, and values \(A, B, x, \lambda\).
Definition at line 737 of file slepc_solver.h.
void SolverBase< OutputVector >::solve | ( | const PETScWrappers::MatrixBase & | A, |
const PETScWrappers::MatrixBase & | B, | ||
std::vector< double > & | real_eigenvalues, | ||
std::vector< double > & | imag_eigenvalues, | ||
std::vector< OutputVector > & | real_eigenvectors, | ||
std::vector< OutputVector > & | imag_eigenvectors, | ||
const unsigned int | n_eigenpairs = 1 |
||
) |
Same as above, but here a composite method for solving the system \(A x=\lambda B x\) with real matrices \(A, B\) and imaginary eigenpairs \(x, \lambda\).
Definition at line 775 of file slepc_solver.h.
void SLEPcWrappers::SolverBase::set_initial_space | ( | const std::vector< Vector > & | initial_space | ) |
Set the initial vector space for the solver.
By default, SLEPc initializes the starting vector or the initial subspace randomly.
void SolverBase< VectorType >::set_transformation | ( | SLEPcWrappers::TransformationBase & | this_transformation | ) |
Set the spectral transformation to be used.
Definition at line 97 of file slepc_solver.cc.
void SolverBase< VectorType >::set_target_eigenvalue | ( | const PetscScalar & | this_target | ) |
Set target eigenvalues in the spectrum to be computed. By default, no target is set.
Definition at line 125 of file slepc_solver.cc.
void SolverBase< VectorType >::set_which_eigenpairs | ( | EPSWhich | set_which | ) |
Indicate which part of the spectrum is to be computed. By default largest magnitude eigenvalues are computed.
Definition at line 137 of file slepc_solver.cc.
void SolverBase< VectorType >::set_problem_type | ( | EPSProblemType | set_problem | ) |
Specify the type of the eigenspectrum problem. This can be used to exploit known symmetries of the matrices that make up the standard/generalized eigenspectrum problem. By default a non-Hermitian problem is assumed.
Definition at line 147 of file slepc_solver.cc.
void SolverBase< VectorType >::get_solver_state | ( | const SolverControl::State | state | ) |
Take the information provided from SLEPc and checks it against deal.II's own SolverControl objects to see if convergence has been reached.
Definition at line 306 of file slepc_solver.cc.
SolverControl & SolverBase< VectorType >::control | ( | ) | const |
Access to the object that controls convergence.
Definition at line 334 of file slepc_solver.cc.
|
protected |
Solve the linear system for n_eigenpairs
eigenstates. Parameter n_converged
contains the actual number of eigenstates that have converged; this can be both fewer or more than n_eigenpairs, depending on the SLEPc eigensolver used.
Definition at line 156 of file slepc_solver.cc.
|
protected |
Access the real parts of solutions for a solved eigenvector problem, pair index solutions, \(\text{index}\,\in\,0\dots \mathrm{n\_converged}-1\).
Definition at line 259 of file slepc_solver.cc.
|
protected |
Access the real and imaginary parts of solutions for a solved eigenvector problem, pair index solutions, \(\text{index}\,\in\,0\dots \mathrm{n\_converged}-1\).
Definition at line 272 of file slepc_solver.cc.
|
protected |
Initialize solver for the linear system \(Ax=\lambda x\). (Note: this is required before calling solve ())
Definition at line 76 of file slepc_solver.cc.
|
protected |
Same as above, but here initialize solver for the linear system \(A x=\lambda B x\).
Definition at line 86 of file slepc_solver.cc.
|
staticprivate |
A function that can be used in SLEPc as a callback to check on convergence.
Definition at line 342 of file slepc_solver.cc.
void SLEPcWrappers::SolverBase::set_initial_space | ( | const std::vector< VectorType > & | this_initial_space | ) |
Definition at line 831 of file slepc_solver.h.
|
protected |
Reference to the object that controls convergence of the iterative solver.
Definition at line 296 of file slepc_solver.h.
|
protected |
Copy of the MPI communicator object to be used for the solver.
Definition at line 301 of file slepc_solver.h.
|
protected |
Objects for Eigenvalue Problem Solver.
Definition at line 353 of file slepc_solver.h.
|
private |
Convergence reason.
Definition at line 359 of file slepc_solver.h.