Numerical routines
Eigenvalue problems
Arnoldi
Real symmetric problem for extreme eigenvalues
The Arnoldi method for real symmetric eigenvalue problems for extreme eigenvalues is implemented in subroutine
eigensolver_real_arpack in MODULE mod_eigensolver_real_arpack. One has to
provide a subroutine for matrix-vector-multiplication and a subroutine to solve
a linear equation (this is only used for the shift-invert-option).
They are contained in MODULE
eigensolver_arpack_routines.
SUBROUTINE matvec_sg_arpack
calculates yV = D^(1/2)*H*D^(1/2)*xV, where D^(1/2) is the diagonal matrix
stored in diag_sgV in MODULE normalization_factors_sg
and H is the
Hamilton-matrix stored in MODULE sparse_matrix_rout_real.
SUBROUTINE lin_equation_solver_arnoldi: dummy subroutine since
option 'shift-invert' is not used.
This method can be used for calculation of the Eigenvalues of the single-band
Hamiltonian.
Complex hermitian problem for extreme eigenvalues
The Arnoldi method for complex hermitian eigenvalue problems for extreme
eigenvalues is implemented in subroutine
arnoldi_complex in MODULE mod_eigensolver_complex_arpack. One has to provide a
subroutine for matrix-vector-multiplication and a subroutine to solve a linear
equation (this is only used for the shift-invert-option).
They are contained in MODULE
eigensolver_arpack_routines
and are used for calculation of the single-band Hamiltonmatrix with magnetic
field:
SUBROUTINE matvec_magnsg_arpack
calculates yV = D^(1/2)*H*D^(1/2)*xV, where D^(1/2) is the diagonal matrix
stored in diag_sgV in MODULE normalization_factors_sg
and H is the
Hamilton-matrix stored in MODULE sparse_matrix_rout.
SUBROUTINE m_lin_equation_solver_arnoldi: dummy subroutine since
option 'shift-invert' is not used.
This method is also used for diagonalization of the 6x6-kp-Hamiltonian. The
subroutines are contained in MODULE
arnoldi_complex_routines:
SUBROUTINE matvec_arnoldi_complex
calculates yV = D^(1/2)*H*D^(1/2)*xV, where D^(1/2) is the diagonal matrix
stored in diag_kpV in MODULE normalization_factors_sg
and H is the
Hamilton-matrix stored in MODULE sparse_matrix_rout.
SUBROUTINE lin_equation_solver_arnoldi_c: dummy subroutine since
option 'shift-invert' is not used.
Conjugate Gradients
Complex hermitian problem for extreme eigenvalues
Extreme eigenvalues of a complex hermitian matrix can be calculated
employing a conjugate gradient scheme. This method is contained in subroutine
eigensolver_hermitian in MODULE mod_eigensolver_hermitian.
This method can be used for diagonalization of the 6x6-kp-Hamiltonian. The
subroutines are contained in MODULE
eigensolver_iter_routines:
SUBROUTINE matrix_vector_eigencg
calculates yV = D^(1/2)*H*D^(1/2)*xV, where D^(1/2) is the diagonal matrix
stored in diag_kpV in MODULE normalization_factors_sg
and H is the
Hamilton-matrix stored in MODULE sparse_matrix_rout.
SUBROUTINE precond_eigencg: preconditioner
Note: Only the 1D preconditioner is implemented.
SUBROUTINE inner_product_eigencg: inner product is the
standard dot product
For this method there exists also a version for real, symmetric matrices:
subroutine
eigensolver_realsym in MODULE mod_eigensolver_realsym.
Chebychev-Arnoldi
Real symmetric problem for extreme eigenvalues
(by A. Trellakis)
Complex hermitian problem for extreme eigenvalues
(by A. Trellakis) |