wham_get_eig_deleig Subroutine

public subroutine wham_get_eig_deleig(kpt, eig, del_eig, HH, delHH, UU)

Uses

  • proc~~wham_get_eig_deleig~~UsesGraph proc~wham_get_eig_deleig wham_get_eig_deleig module~w90_postw90_common w90_postw90_common proc~wham_get_eig_deleig->module~w90_postw90_common module~w90_get_oper w90_get_oper proc~wham_get_eig_deleig->module~w90_get_oper module~w90_utility w90_utility proc~wham_get_eig_deleig->module~w90_utility module~w90_parameters w90_parameters proc~wham_get_eig_deleig->module~w90_parameters module~w90_comms w90_comms module~w90_postw90_common->module~w90_comms module~w90_constants w90_constants module~w90_postw90_common->module~w90_constants module~w90_get_oper->module~w90_constants module~w90_utility->module~w90_constants module~w90_io w90_io module~w90_parameters->module~w90_io module~w90_parameters->module~w90_constants module~w90_io->module~w90_constants module~w90_comms->module~w90_io module~w90_comms->module~w90_constants

Given a k point, this function returns eigenvalues E and derivatives of the eigenvalues dE/dk_a, using wham_get_deleig_a

Arguments

Type IntentOptional AttributesName
real(kind=dp), intent(in), dimension(3):: kpt

the three coordinates of the k point vector (in relative coordinates)

real(kind=dp), intent(out) :: eig(num_wann)

the calculated eigenvalues at kpt

real(kind=dp), intent(out) :: del_eig(num_wann,3)

the calculated derivatives of the eigenvalues at kpt [first component: band; second component: 1,2,3 for the derivatives along the three k directions]

complex(kind=dp), intent(out), dimension(:, :):: HH

the Hamiltonian matrix at kpt

complex(kind=dp), intent(out), dimension(:, :, :):: delHH

the delHH matrix (derivative of H) at kpt

complex(kind=dp), intent(out), dimension(:, :):: UU

the rotation matrix that gives the eigenvectors of HH


Calls

proc~~wham_get_eig_deleig~~CallsGraph proc~wham_get_eig_deleig wham_get_eig_deleig proc~utility_diagonalize utility_diagonalize proc~wham_get_eig_deleig->proc~utility_diagonalize proc~get_hh_r get_HH_R proc~wham_get_eig_deleig->proc~get_hh_r proc~pw90common_fourier_r_to_k pw90common_fourier_R_to_k proc~wham_get_eig_deleig->proc~pw90common_fourier_r_to_k proc~io_error io_error proc~utility_diagonalize->proc~io_error proc~get_win_min get_win_min proc~get_hh_r->proc~get_win_min proc~fourier_q_to_r fourier_q_to_R proc~get_hh_r->proc~fourier_q_to_r proc~get_hh_r->proc~io_error proc~io_file_unit io_file_unit proc~get_hh_r->proc~io_file_unit

Called by

proc~~wham_get_eig_deleig~~CalledByGraph proc~wham_get_eig_deleig wham_get_eig_deleig proc~calctdfanddos calcTDFandDOS proc~calctdfanddos->proc~wham_get_eig_deleig proc~berry_get_sc_klist berry_get_sc_klist proc~berry_get_sc_klist->proc~wham_get_eig_deleig proc~berry_get_shc_klist berry_get_shc_klist proc~berry_get_shc_klist->proc~wham_get_eig_deleig proc~k_slice k_slice proc~k_slice->proc~wham_get_eig_deleig proc~k_slice->proc~berry_get_shc_klist proc~dos_main dos_main proc~dos_main->proc~wham_get_eig_deleig proc~gyrotropic_get_k_list gyrotropic_get_k_list proc~gyrotropic_get_k_list->proc~wham_get_eig_deleig proc~berry_get_kubo_k berry_get_kubo_k proc~berry_get_kubo_k->proc~wham_get_eig_deleig proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->proc~gyrotropic_get_k_list proc~boltzwann_main boltzwann_main proc~boltzwann_main->proc~calctdfanddos proc~k_path k_path proc~k_path->proc~berry_get_shc_klist proc~berry_main berry_main proc~berry_main->proc~berry_get_sc_klist proc~berry_main->proc~berry_get_shc_klist proc~berry_main->proc~berry_get_kubo_k

Contents

Source Code


Source Code

  subroutine wham_get_eig_deleig(kpt, eig, del_eig, HH, delHH, UU)
    !! Given a k point, this function returns eigenvalues E and
    !! derivatives of the eigenvalues dE/dk_a, using wham_get_deleig_a
    !
    use w90_parameters, only: num_wann
    use w90_get_oper, only: HH_R, get_HH_R
    use w90_postw90_common, only: pw90common_fourier_R_to_k
    use w90_utility, only: utility_diagonalize

    real(kind=dp), dimension(3), intent(in)         :: kpt
    !! the three coordinates of the k point vector (in relative coordinates)
    real(kind=dp), intent(out)                      :: eig(num_wann)
    !! the calculated eigenvalues at kpt
    real(kind=dp), intent(out)                      :: del_eig(num_wann, 3)
    !! the calculated derivatives of the eigenvalues at kpt [first component: band; second component: 1,2,3
    !! for the derivatives along the three k directions]
    complex(kind=dp), dimension(:, :), intent(out)   :: HH
    !! the Hamiltonian matrix at kpt
    complex(kind=dp), dimension(:, :, :), intent(out) :: delHH
    !! the delHH matrix (derivative of H) at kpt
    complex(kind=dp), dimension(:, :), intent(out)   :: UU
    !! the rotation matrix that gives the eigenvectors of HH

    ! I call it to be sure that it has been called already once,
    ! and that HH_R contains the actual matrix.
    ! Further calls should return very fast.
    call get_HH_R

    call pw90common_fourier_R_to_k(kpt, HH_R, HH, 0)
    call utility_diagonalize(HH, num_wann, eig, UU)
    call pw90common_fourier_R_to_k(kpt, HH_R, delHH(:, :, 1), 1)
    call pw90common_fourier_R_to_k(kpt, HH_R, delHH(:, :, 2), 2)
    call pw90common_fourier_R_to_k(kpt, HH_R, delHH(:, :, 3), 3)
    call wham_get_deleig_a(del_eig(:, 1), eig, delHH(:, :, 1), UU)
    call wham_get_deleig_a(del_eig(:, 2), eig, delHH(:, :, 2), UU)
    call wham_get_deleig_a(del_eig(:, 3), eig, delHH(:, :, 3), UU)

  end subroutine wham_get_eig_deleig