[ Home ] [ News ] [ Contact ] [ Search ]

 About us
 Useful Links
 Publications
 Copyright notice
 nextnano³ documentation

 -> Download Software
 * password protected

 

 
 

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.

 

Jacobi-Davidson

Complex hermitian problem for inner eigenvalues

Inner Eigenvalues can be calculated by the Jacobi-Davidson method. It calculates the Eigenvalues around a given energy. This routine is called in subroutine eigensolver_davidson in MODULE mod_eigensolver_davidson. Three subroutines are directly called (amul, bmul, precon).

In MODULE mod_precond_ilu_davidson there are several routines used in context wirh Jacobi-Davidson:

  • subroutine transform_sparse_to_ilu3D(2D,1D)
    The matrix to be diagonalized is D^(1/2) H D^(1/2). In the setup, the matrix H is stored as sparse matrix. In Davidson routines, the routine amul directly calls the sparse matrix-vector product. So the diagonal matrices D^(1/2) have to be taken into account.
  • subroutine setup_david_precond_jac: To setup the Jacobi preconditioner.

Note: It has turned out for Jacobi-Davidson that degenerate eigenstates are not orthogonal. So we lift degeneracy by adding a perturbation of 1d-6. Furthermore it turned out that the method works better if the matrix is shifted in a way that the separation energy around which the eigenstates are calculated is shifted to +2d0 for electrons and -2d0 for holes.

 

Chebychev-Arnoldi

Real symmetric problem for extreme eigenvalues

(by A. Trellakis)

Complex hermitian problem for extreme eigenvalues

(by A. Trellakis)

   
Last modified: 09-Jun-2009   -   optimised for Microsoft Internet Explorer 7®