mirror of https://gitlab.com/QEF/q-e.git
43 lines
1.2 KiB
Fortran
43 lines
1.2 KiB
Fortran
!
|
|
! Copyright (C) 2003 A. Smogunov
|
|
! This file is distributed under the terms of the
|
|
! GNU General Public License. See the file `License'
|
|
! in the root directory of the present distribution,
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
!
|
|
subroutine eigenchnl(nchanl, nchanr, tchan, vec, eigen)
|
|
!
|
|
! It performs the eigenchannel decomposition, diagonalizing
|
|
! the matrix amat=T^+T, where T is a transmission matrix
|
|
!
|
|
USE kinds, only : DP
|
|
implicit none
|
|
|
|
integer :: info
|
|
integer :: nchanl, & ! number of channels in the left tip
|
|
nchanr ! ------------ right tip
|
|
real(DP) :: eigen(nchanl) ! eigenvalues
|
|
complex(DP) :: &
|
|
tchan(nchanr, nchanl), & ! T matrix
|
|
vec(nchanl, nchanl), & ! eigenvectors
|
|
x1, x2
|
|
complex(DP), allocatable :: amat(:,:)
|
|
|
|
allocate( amat( nchanl, nchanl ) )
|
|
|
|
! amat=T^+T
|
|
x1=(1.d0, 0.d0)
|
|
x2=(0.d0, 0.d0)
|
|
call zgemm('c', 'n', nchanl, nchanl, nchanr, x1, tchan, nchanr, &
|
|
tchan, nchanr, x2, amat, nchanl)
|
|
|
|
! looking for eigenvalues of amat
|
|
info=-1
|
|
call hev_ab(nchanl, amat, nchanl, eigen, vec, 0.d0, 0.d0, info)
|
|
|
|
deallocate(amat)
|
|
|
|
return
|
|
end subroutine eigenchnl
|
|
|