wham_get_D_h Subroutine

public subroutine wham_get_D_h(delHH, D_h, UU, eig, num_wann)

Uses

  • proc~~wham_get_d_h~~UsesGraph proc~wham_get_d_h wham_get_D_h module~w90_constants w90_constants proc~wham_get_d_h->module~w90_constants module~w90_utility w90_utility proc~wham_get_d_h->module~w90_utility module~w90_utility->module~w90_constants module~w90_comms w90_comms module~w90_utility->module~w90_comms module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base

Compute D^H_a=UU^dag.del_a UU (a=x,y,z) using Eq.(24) of WYSV06

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(in) :: delHH(:,:,:)
complex(kind=dp), intent(out) :: D_h(:,:,:)
complex(kind=dp), intent(in) :: UU(:,:)
real(kind=dp), intent(in) :: eig(:)
integer, intent(in) :: num_wann

Calls

proc~~wham_get_d_h~~CallsGraph proc~wham_get_d_h wham_get_D_h proc~utility_rotate utility_rotate proc~wham_get_d_h->proc~utility_rotate

Called by

proc~~wham_get_d_h~~CalledByGraph proc~wham_get_d_h wham_get_D_h proc~berry_get_kubo_k berry_get_kubo_k proc~berry_get_kubo_k->proc~wham_get_d_h proc~berry_get_sc_klist berry_get_sc_klist proc~berry_get_sc_klist->proc~wham_get_d_h proc~berry_get_shc_klist berry_get_shc_klist proc~berry_get_shc_klist->proc~wham_get_d_h proc~gyrotropic_get_k_list gyrotropic_get_k_list proc~gyrotropic_get_k_list->proc~wham_get_d_h proc~berry_main berry_main proc~berry_main->proc~berry_get_kubo_k proc~berry_main->proc~berry_get_sc_klist proc~berry_main->proc~berry_get_shc_klist proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->proc~gyrotropic_get_k_list proc~k_path k_path proc~k_path->proc~berry_get_shc_klist proc~k_slice k_slice proc~k_slice->proc~berry_get_shc_klist program~postw90 postw90 program~postw90->proc~berry_main program~postw90->proc~gyrotropic_main program~postw90->proc~k_path program~postw90->proc~k_slice

Source Code

  subroutine wham_get_D_h(delHH, D_h, UU, eig, num_wann)
    !================================================!
    !
    !! Compute D^H_a=UU^dag.del_a UU (a=x,y,z)
    !! using Eq.(24) of WYSV06
    !
    !================================================!

    ! TO DO: Implement version where energy denominators only connect
    !        occupied and empty states. In this case probably do not need
    !        to worry about avoiding small energy denominators

    use w90_constants, only: dp, cmplx_0
    use w90_utility, only: utility_rotate

    ! arguments
    complex(kind=dp), intent(in) :: delHH(:, :, :)
    complex(kind=dp), intent(in) :: UU(:, :)
    complex(kind=dp), intent(out) :: D_h(:, :, :)

    real(kind=dp), intent(in) :: eig(:)

    integer, intent(in) :: num_wann

    ! local variables
    complex(kind=dp), allocatable :: delHH_bar_i(:, :)
    integer                       :: n, m, i

    allocate (delHH_bar_i(num_wann, num_wann))
    D_h = cmplx_0
    do i = 1, 3
      delHH_bar_i(:, :) = utility_rotate(delHH(:, :, i), UU, num_wann)
      do m = 1, num_wann
        do n = 1, num_wann
          if (n == m .or. abs(eig(m) - eig(n)) < 1.0e-7_dp) cycle
          D_h(n, m, i) = delHH_bar_i(n, m)/(eig(m) - eig(n))
        end do
      end do
    end do

  end subroutine wham_get_D_h