nevp#
Includes our NEVP solvers.
Modules:
-
beyn–Includes our NEVP solver based on Beyn's method.
-
full–Includes our NEVP solver based on linearization.
-
nevp–Includes the abstract base class for the non-linear eigenvalue solvers.
Classes:
-
Beyn–Beyn's integral method for solving NEVP.[^1]
-
Full–An NEVP solver based on linearization.
-
NEVP–Abstract base class for the non-linear eigenvalue solvers.
Beyn
#
Beyn(r_o: float, r_i: float, m_0: int, num_quad_points: int, num_threads_contour: int = 1024, eig_compute_location: str = 'numpy', project_compute_location: str = 'numpy', use_qr: bool = False, contour_batch_size: int | None = None, use_pinned_memory: bool = True)
Bases: NEVP
Beyn's integral method for solving NEVP.1
This is implemented along the lines of what is described in 2.
Parameters:
-
r_o(float) –The outer radius of the annulus for the contour integration.
-
r_i(float) –The inner radius of the annulus for the contour integration.
-
m_0(int) –Guess for the number of eigenvalues that lie in the subspace.
-
num_quad_points(int) –The number of quadrature points to use for the contour integration.
-
num_threads_contour(int, default:1024) –The number of cuda threads to use for the contour integration kernel. Only relevant for GPU computations.
-
eig_compute_location(str, default:'numpy') –The location where to compute the eigenvalues and eigenvectors. Can be either "numpy" or "cupy" or "nvmath".
-
project_compute_location(str, default:'numpy') –The location where to compute the singular value or qr decomposition for the projector. Can be either "numpy" or "cupy".
-
use_qr(bool, default:False) –Whether to use QR decomposition for the projector instead of SVD. Default is
False. -
contour_batch_size(int, default:None) –The batch size for the contour integration kernel. If
None, the batch size is set tonum_quad_points. -
use_pinned_memory(bool, default:True) –Whether to use pinnend memory if cupy is used. Default is
True.
Methods:
-
__call__–Solves the polynomial eigenvalue problem through contour integration.
__call__
#
Solves the polynomial eigenvalue problem through contour integration.
This method solves the non-linear eigenvalue problem defined by
the coefficient blocks a_xx from lowest to highest order.
Parameters:
-
a_xx(tuple[NDArray, ...]) –The coefficient blocks of the non-linear eigenvalue problem from lowest to highest order.
Returns:
-
ws(NDArray) –The eigenvalues.
-
vs(NDArray) –The right eigenvectors.
Full
#
Full(eig_compute_location: str = 'numpy', use_pinned_memory: bool = True, reduce: bool = False, a_xx_sparsity: tuple[csc_matrix, ...] | None = None)
Bases: NEVP
An NEVP solver based on linearization.
Implemented along the lines of what is described in 1.
-
S. Brück, Ab-initio Quantum Transport Simulations for Nanoelectronic Devices, ETH Zurich, 2017. ↩
Parameters:
-
eig_compute_location(str, default:'numpy') –The location where to compute the eigenvalues and eigenvectors. Can be either "numpy" or "cupy" or "nvmath".
-
use_pinned_memory(bool, default:True) –Whether to use pinned memory if cupy is used. Default is
True. -
reduce(bool, default:False) –Whether to reduce the problem size by eliminating columns that are zero in the first and last coefficient blocks. These columns correspond to eigenvalues that are infinity or zero.
-
a_xx_sparsity(tuple[csc_matrix, ...] or None, default:None) –The sparsity patterns of the coefficient blocks of the NEVP. If
reduceisTrue, this can be provided at instantiation to identify the zero columns and perform the reduction. IfreduceisTrueanda_xxis not provided, the zero columns will be identified at runtime, which may introduce some overhead.
Methods:
-
__call__–Solves the polynomial eigenvalue problem through linearization.
__call__
#
Solves the polynomial eigenvalue problem through linearization.
This method solves the non-linear eigenvalue problem defined by
the coefficient blocks a_xx from lowest to highest order.
Parameters:
-
a_xx(tuple[NDArray, ...]) –The coefficient blocks of the non-linear eigenvalue problem from lowest to highest order.
Returns:
-
ws(NDArray) –The eigenvalues.
-
vs(NDArray) –The right eigenvectors.
NEVP
#
Bases: ABC
Abstract base class for the non-linear eigenvalue solvers.
Methods:
-
__call__–Solves the polynomial eigenvalue problem.
__call__
abstractmethod
#
Solves the polynomial eigenvalue problem.
This method solves the non-linear eigenvalue problem defined by
the coefficient blocks a_xx from lowest to highest order.
Parameters:
-
a_xx(tuple[NDArray, ...]) –The coefficient blocks of the non-linear eigenvalue problem from lowest to highest order.
Returns:
-
ws(NDArray) –The eigenvalues.
-
vs(NDArray) –The right eigenvectors.