wham_get_D_h_P_value Subroutine

public subroutine wham_get_D_h_P_value(pw90_berry, delHH, D_h, UU, eig, num_wann)

Uses

  • proc~~wham_get_d_h_p_value~~UsesGraph proc~wham_get_d_h_p_value wham_get_D_h_P_value module~w90_constants w90_constants proc~wham_get_d_h_p_value->module~w90_constants module~w90_postw90_types w90_postw90_types proc~wham_get_d_h_p_value->module~w90_postw90_types module~w90_utility w90_utility proc~wham_get_d_h_p_value->module~w90_utility module~w90_postw90_types->module~w90_constants module~w90_comms w90_comms module~w90_postw90_types->module~w90_comms module~w90_utility->module~w90_constants 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
type(pw90_berry_mod_type), intent(in) :: pw90_berry
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_p_value~~CallsGraph proc~wham_get_d_h_p_value wham_get_D_h_P_value proc~utility_rotate utility_rotate proc~wham_get_d_h_p_value->proc~utility_rotate

Called by

proc~~wham_get_d_h_p_value~~CalledByGraph proc~wham_get_d_h_p_value wham_get_D_h_P_value proc~berry_get_kdotp berry_get_kdotp proc~berry_get_kdotp->proc~wham_get_d_h_p_value proc~berry_get_sc_klist berry_get_sc_klist proc~berry_get_sc_klist->proc~wham_get_d_h_p_value proc~berry_main berry_main proc~berry_main->proc~berry_get_kdotp proc~berry_main->proc~berry_get_sc_klist program~postw90 postw90 program~postw90->proc~berry_main

Source Code

  subroutine wham_get_D_h_P_value(pw90_berry, 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
    !  and prescription for energy denominator
    !  from BK81
    !
    !================================================!

    ! 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_postw90_types, only: pw90_berry_mod_type !sc_eta
    use w90_utility, only: utility_rotate

    ! arguments
    type(pw90_berry_mod_type), intent(in) :: pw90_berry

    integer, intent(in) :: num_wann

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

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

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

    allocate (delHH_bar_i(num_wann, num_wann))
    D_h = cmplx_0
    deltaE = 0.d0
    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) cycle
          deltaE = eig(m) - eig(n)
          D_h(n, m, i) = delHH_bar_i(n, m)*(deltaE/(deltaE**(2) + pw90_berry%sc_eta**(2)))
        end do
      end do
    end do

  end subroutine wham_get_D_h_P_value