pw90common_fourier_R_to_k Subroutine

public subroutine pw90common_fourier_R_to_k(ws_region, wannier_data, ws_distance, wigner_seitz, OO, OO_R, kpt, real_lattice, mp_grid, alpha, num_wann, error, comm)

Uses

  • proc~~pw90common_fourier_r_to_k~~UsesGraph proc~pw90common_fourier_r_to_k pw90common_fourier_R_to_k module~w90_comms w90_comms proc~pw90common_fourier_r_to_k->module~w90_comms module~w90_constants w90_constants proc~pw90common_fourier_r_to_k->module~w90_constants module~w90_postw90_types w90_postw90_types proc~pw90common_fourier_r_to_k->module~w90_postw90_types module~w90_types w90_types proc~pw90common_fourier_r_to_k->module~w90_types module~w90_ws_distance w90_ws_distance proc~pw90common_fourier_r_to_k->module~w90_ws_distance module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base module~w90_postw90_types->module~w90_comms module~w90_postw90_types->module~w90_constants module~w90_types->module~w90_constants module~w90_ws_distance->module~w90_constants module~w90_error w90_error module~w90_ws_distance->module~w90_error module~w90_error->module~w90_comms module~w90_error->module~w90_error_base

For alpha=0: O_ij(R) --> O_ij(k) = sum_R e^{+ik.R}*O_ij(R)

For alpha=1,2,3: sum_R [cmplx_iR_alphae^{+ik.R}O_ij(R)] where R_alpha is a Cartesian component of R REMOVE EVENTUALLY* (replace with pw90common_fourier_R_to_k_new)

Arguments

Type IntentOptional Attributes Name
type(ws_region_type), intent(in) :: ws_region
type(wannier_data_type), intent(in) :: wannier_data
type(ws_distance_type), intent(inout) :: ws_distance
type(wigner_seitz_type), intent(in) :: wigner_seitz
complex(kind=dp), intent(out) :: OO(:,:)
complex(kind=dp), intent(in) :: OO_R(:,:,:)
real(kind=dp), intent(in) :: kpt(3)
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: mp_grid(3)
integer, intent(in) :: alpha
integer, intent(in) :: num_wann
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

Called by

proc~~pw90common_fourier_r_to_k~~CalledByGraph proc~pw90common_fourier_r_to_k pw90common_fourier_R_to_k proc~berry_get_imfgh_klist berry_get_imfgh_klist proc~berry_get_imfgh_klist->proc~pw90common_fourier_r_to_k proc~dos_main dos_main proc~dos_main->proc~pw90common_fourier_r_to_k proc~wham_get_eig_deleig wham_get_eig_deleig proc~dos_main->proc~wham_get_eig_deleig proc~dos_get_k dos_get_k proc~dos_main->proc~dos_get_k proc~geninterp_main geninterp_main proc~geninterp_main->proc~pw90common_fourier_r_to_k proc~geninterp_main->proc~wham_get_eig_deleig proc~k_path k_path proc~k_path->proc~pw90common_fourier_r_to_k proc~k_path->proc~berry_get_imfgh_klist proc~spin_get_nk spin_get_nk proc~k_path->proc~spin_get_nk proc~berry_get_imf_klist berry_get_imf_klist proc~k_path->proc~berry_get_imf_klist proc~berry_get_shc_klist berry_get_shc_klist proc~k_path->proc~berry_get_shc_klist proc~k_slice k_slice proc~k_slice->proc~pw90common_fourier_r_to_k proc~k_slice->proc~berry_get_imfgh_klist proc~k_slice->proc~spin_get_nk proc~k_slice->proc~wham_get_eig_deleig proc~k_slice->proc~berry_get_imf_klist proc~k_slice->proc~berry_get_shc_klist proc~spin_get_moment_k spin_get_moment_k proc~spin_get_moment_k->proc~pw90common_fourier_r_to_k proc~spin_get_nk->proc~pw90common_fourier_r_to_k proc~spin_get_s spin_get_S proc~spin_get_s->proc~pw90common_fourier_r_to_k proc~wham_get_eig_deleig->proc~pw90common_fourier_r_to_k proc~berry_get_imf_klist->proc~berry_get_imfgh_klist proc~berry_get_kdotp berry_get_kdotp proc~berry_get_kdotp->proc~wham_get_eig_deleig proc~berry_get_kubo_k berry_get_kubo_k proc~berry_get_kubo_k->proc~spin_get_nk proc~berry_get_kubo_k->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->proc~wham_get_eig_deleig proc~berry_main berry_main proc~berry_main->proc~berry_get_imfgh_klist proc~berry_main->proc~berry_get_imf_klist proc~berry_main->proc~berry_get_kdotp 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~calctdfanddos calcTDFandDOS proc~calctdfanddos->proc~wham_get_eig_deleig proc~calctdfanddos->proc~dos_get_k proc~tdf_kpt TDF_kpt proc~calctdfanddos->proc~tdf_kpt proc~dos_get_k->proc~spin_get_nk proc~gyrotropic_get_k_list gyrotropic_get_k_list proc~gyrotropic_get_k_list->proc~berry_get_imfgh_klist proc~gyrotropic_get_k_list->proc~spin_get_s proc~gyrotropic_get_k_list->proc~wham_get_eig_deleig proc~gyrotropic_get_k_list->proc~berry_get_imf_klist proc~spin_get_moment spin_get_moment proc~spin_get_moment->proc~spin_get_moment_k proc~tdf_kpt->proc~spin_get_nk program~postw90 postw90 program~postw90->proc~dos_main program~postw90->proc~geninterp_main program~postw90->proc~k_path program~postw90->proc~k_slice program~postw90->proc~berry_main program~postw90->proc~spin_get_moment proc~boltzwann_main boltzwann_main program~postw90->proc~boltzwann_main proc~gyrotropic_main gyrotropic_main program~postw90->proc~gyrotropic_main proc~boltzwann_main->proc~calctdfanddos proc~gyrotropic_main->proc~gyrotropic_get_k_list

Source Code

  subroutine pw90common_fourier_R_to_k(ws_region, wannier_data, ws_distance, wigner_seitz, OO, &
                                       OO_R, kpt, real_lattice, mp_grid, alpha, num_wann, &
                                       error, comm)
    !================================================!
    !
    !! For alpha=0:
    !! O_ij(R) --> O_ij(k) = sum_R e^{+ik.R}*O_ij(R)
    !!
    !! For alpha=1,2,3:
    !! sum_R [cmplx_i*R_alpha*e^{+ik.R}*O_ij(R)]
    !! where R_alpha is a Cartesian component of R
    !! ***REMOVE EVENTUALLY*** (replace with pw90common_fourier_R_to_k_new)
    !
    !================================================!

    use w90_constants, only: dp, cmplx_0, cmplx_i, twopi
    use w90_types, only: wannier_data_type, ws_region_type, ws_distance_type
    use w90_ws_distance, only: ws_translate_dist
    use w90_postw90_types, only: wigner_seitz_type
    use w90_comms, only: w90_comm_type

    implicit none

    ! arguments
    type(ws_region_type), intent(in) :: ws_region
    type(wannier_data_type), intent(in) :: wannier_data
    type(wigner_seitz_type), intent(in) :: wigner_seitz
    type(ws_distance_type), intent(inout) :: ws_distance
    type(w90_error_type), allocatable, intent(out) :: error
    type(w90_comm_type), intent(in) :: comm

    integer, intent(in) :: num_wann
    integer, intent(in) :: mp_grid(3)
    integer, intent(in) :: alpha

    real(kind=dp), intent(in) :: kpt(3), real_lattice(3, 3)

    complex(kind=dp), intent(in) :: OO_R(:, :, :)
    complex(kind=dp), intent(out) :: OO(:, :)

    ! local variables
    integer          :: ir, i, j, ideg
    real(kind=dp)    :: rdotk
    complex(kind=dp) :: phase_fac

    OO(:, :) = cmplx_0
    do ir = 1, wigner_seitz%nrpts_pw90
      ! [lp] Original code, without IJ-dependent shift:
      rdotk = twopi*dot_product(kpt(:), wigner_seitz%irvec_pw90(:, ir))
      phase_fac = cmplx(cos(rdotk), sin(rdotk), dp)
      if (alpha == 0) then
        OO(:, :) = OO(:, :) + phase_fac*OO_R(:, :, ir)
      elseif (alpha == 1 .or. alpha == 2 .or. alpha == 3) then
        OO(:, :) = OO(:, :) + &
                   cmplx_i*wigner_seitz%crvec_pw90(alpha, ir)*phase_fac*OO_R(:, :, ir)
      else
        stop 'wrong value of alpha in pw90common_fourier_R_to_k'
      end if

    end do

  end subroutine pw90common_fourier_R_to_k