OBC
Options for open-boundary condition (OBC) solvers.
The OBC solvers compute the surface Green's functions of the contacts. The surface Green's functions is the solution of the non-linear equation:
algorithm#
The OBC algorithm to use.
- "sancho-rubio": Uses the Sancho-Rubio iterative scheme to compute the surface Green's functions. This method achieves exponential convergence compared to the linear convergence of fixed-point iterations.
- "spectral": Uses a spectral NEVP solver to compute eigenpair and uses them to construct the surface Green's functions. This is generally more efficient method when combined with a contour integral NEVP solver, but requires more parameter tuning.
nevp_solver#
The NEVP solver to use for the spectral OBC algorithm.
-
"beyn": Uses the Beyn's contour integral method to solve the NEVP to find the eigenpairs within a specified contour in the complex plane.
-
"full": Uses a full dense eigensolver to solve for all eigenvalues by linearizing the problem. This results in a doubled problem size which is also not reduced by block sectioning / periodicity.
The following NEVP problem is solved:
where b goes from -block_sections to +block_sections and \(\hat{\mathbf{M}}_{n}\) are potentially reduced coupling matrices.
Only used if algorithm is set to "spectral".
block_sections#
The periodicity of the blocks along the transport direction.
Used in the spectral method with beyn to reduce the size of the NEVP. For example, if the supercell is constructed from 2 unit cells along the transport direction, setting this parameter to 2 will halve the size of the NEVP.
Contact blocks need to be sorted accordingly.
min_decay#
The minimum decay rate where to differentiate between propagating and evanescent modes.
max_decay#
The maximum decay rate for evanescent modes.
Very large modes do not contribute to the surface Green's functions and can be neglected. Very large modes can also lead to numerical instabilities.
If not set, it is computed as 1.5 * log(r_o).
num_ref_iterations#
The number of fixed-point iterations used to refine the surface Green's functions.
This is needed to improve the accuracy of the surface Green's functions if not enough eigenpairs are considered.
Only used if algorithm is set to "spectral".
min_propagation#
The minimum propagation speed for propagating modes.
The propagation speed is computed as:
residual_tolerance#
The tolerance for the residual of the eigenpairs.
The residuals are computed as:
Modes above this tolerance are considered wrong and are not used.
Only used if algorithm is set to "spectral".
residual_normalization#
Whether to normalize the residuals by the norm of the eigenvalue.
This is useful to avoid that large eigenvalues have large residuals and small eigenvalues have small residuals.
warning_threshold#
The threshold for issuing a warning if the surface Green's functions residual is above this value.
The residual is computed as:
This parameter is only used if the formalism is wf. Otherwise, the memoizer
is responsible for residual checking and warnings.
eta_decay#
Small value to separate very slow decaying modes from non-decaying ones in the spectral OBC solver.
Modes that are very close to the unit contour could be misclassified with 'min_decay' and 'min_propagation' conditions i.e. when their decay is smaller than 'min_decay' but they are not propagating fast enough. The not fast enough propagating ones with decay smaller than 'eta_decay' are considered as well decaying modes.
max_iterations#
The maximum number of iterations for the Sancho-Rubio method.
convergence_tol#
The convergence tolerance for the Sancho-Rubio method.
r_o#
The outer radius of the contour in the complex plane for the contour methods.
This parameter should not be too large to avoid having too many eigenpairs inside the contour. It should also not be too small to avoid missing important eigenpairs. If a eigenpair is too close to the contour, it can lead to numerical instabilities.
r_i#
The inner radius of the contour in the complex plane for the contour methods.
This parameter should be chosen to be <1 to capture propagating modes, but not too small to avoid including too many modes.
m_0#
The subspace guess in the contour methods.
The guess has to be larger than the expected number of eigenvalues inside the contour. If too small, the method will fail. If too large, the method will be not/less efficient.
num_quad_points#
The number of quadrature points for the contour integrals.
memoizer#
Options for memoizing the surface Green's functions.