deal.II version GIT relicensing-2289-g1e5549a87a 2024-12-21 21:30:00+00:00
|
#include <deal.II/lac/slepc_solver.h>
Classes | |
struct | AdditionalData |
Public Member Functions | |
SolverKrylovSchur (SolverControl &cn, const MPI_Comm mpi_communicator=PETSC_COMM_SELF, const AdditionalData &data=AdditionalData()) | |
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) |
template<typename VectorType > | |
void | set_initial_space (const std::vector< VectorType > &this_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 |
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 | |
const AdditionalData | additional_data |
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 |
An implementation of the solver interface using the SLEPc Krylov-Schur solver. Usage: All spectrum, all problem types, complex.
For examples of how this and its sibling 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 391 of file slepc_solver.h.
|
explicit |
SLEPc solvers will want to have an MPI communicator context over which computations are parallelized. By default, this carries the same behavior as the PETScWrappers, but you can change that.
Definition at line 361 of file slepc_solver.cc.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
protectedinherited |
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.
|
inherited |
Set the initial vector space for the solver.
By default, SLEPc initializes the starting vector or the initial subspace randomly.
|
inherited |
Definition at line 831 of file slepc_solver.h.
|
inherited |
Set the spectral transformation to be used.
Definition at line 97 of file slepc_solver.cc.
|
inherited |
Set target eigenvalues in the spectrum to be computed. By default, no target is set.
Definition at line 125 of file slepc_solver.cc.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
Access to the object that controls convergence.
Definition at line 334 of file slepc_solver.cc.
|
protectedinherited |
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.
|
protectedinherited |
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.
|
protectedinherited |
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.
|
protectedinherited |
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.
|
staticprivateinherited |
A function that can be used in SLEPc as a callback to check on convergence.
Definition at line 342 of file slepc_solver.cc.
|
protected |
Store a copy of the flags for this particular solver.
Definition at line 415 of file slepc_solver.h.
|
protectedinherited |
Reference to the object that controls convergence of the iterative solver.
Definition at line 296 of file slepc_solver.h.
|
protectedinherited |
Copy of the MPI communicator object to be used for the solver.
Definition at line 301 of file slepc_solver.h.
|
protectedinherited |
Objects for Eigenvalue Problem Solver.
Definition at line 353 of file slepc_solver.h.
|
privateinherited |
Convergence reason.
Definition at line 359 of file slepc_solver.h.