operator_wigner_setup Subroutine

public subroutine operator_wigner_setup(ws_distance, ws_region, wigner_seitz, num_wann, op_R, op_R_opt_ws)

Uses

  • proc~~operator_wigner_setup~~UsesGraph proc~operator_wigner_setup operator_wigner_setup module~w90_constants w90_constants proc~operator_wigner_setup->module~w90_constants module~w90_postw90_types w90_postw90_types proc~operator_wigner_setup->module~w90_postw90_types module~w90_types w90_types proc~operator_wigner_setup->module~w90_types module~w90_postw90_types->module~w90_constants module~w90_comms w90_comms module~w90_postw90_types->module~w90_comms module~w90_types->module~w90_constants module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base

Arguments

Type IntentOptional Attributes Name
type(ws_distance_type), intent(in) :: ws_distance
type(ws_region_type), intent(in) :: ws_region
type(wigner_seitz_type), intent(in) :: wigner_seitz
integer, intent(in) :: num_wann
complex(kind=dp), intent(in) :: op_R(num_wann,num_wann,wigner_seitz%nrpts)

operator in real-space grid, before applying ndegen

complex(kind=dp), intent(inout) :: op_R_opt_ws(num_wann,num_wann,wigner_seitz%nrpts_pw90)

operator in real-space grid, after applying ndegen


Called by

proc~~operator_wigner_setup~~CalledByGraph proc~operator_wigner_setup operator_wigner_setup proc~get_aa_r get_AA_R proc~get_aa_r->proc~operator_wigner_setup proc~get_bb_r get_BB_R proc~get_bb_r->proc~operator_wigner_setup proc~get_cc_r get_CC_R proc~get_cc_r->proc~operator_wigner_setup proc~get_ff_r get_FF_R proc~get_ff_r->proc~operator_wigner_setup proc~get_hh_r get_HH_R proc~get_hh_r->proc~operator_wigner_setup proc~get_saa_r get_SAA_R proc~get_saa_r->proc~operator_wigner_setup proc~get_sbb_r get_SBB_R proc~get_sbb_r->proc~operator_wigner_setup proc~get_sh_r get_SH_R proc~get_sh_r->proc~operator_wigner_setup proc~get_shc_r get_SHC_R proc~get_shc_r->proc~operator_wigner_setup proc~get_ss_r get_SS_R proc~get_ss_r->proc~operator_wigner_setup proc~berry_main berry_main proc~berry_main->proc~get_aa_r proc~berry_main->proc~get_bb_r proc~berry_main->proc~get_cc_r proc~berry_main->proc~get_hh_r proc~berry_main->proc~get_saa_r proc~berry_main->proc~get_sbb_r proc~berry_main->proc~get_sh_r proc~berry_main->proc~get_shc_r proc~berry_main->proc~get_ss_r proc~berry_get_imfgh_klist berry_get_imfgh_klist proc~berry_main->proc~berry_get_imfgh_klist proc~berry_get_kdotp berry_get_kdotp proc~berry_main->proc~berry_get_kdotp proc~berry_get_kubo_k berry_get_kubo_k proc~berry_main->proc~berry_get_kubo_k proc~berry_get_sc_klist berry_get_sc_klist proc~berry_main->proc~berry_get_sc_klist proc~berry_get_shc_klist berry_get_shc_klist proc~berry_main->proc~berry_get_shc_klist proc~berry_get_imf_klist berry_get_imf_klist proc~berry_main->proc~berry_get_imf_klist proc~calctdfanddos calcTDFandDOS proc~calctdfanddos->proc~get_hh_r proc~calctdfanddos->proc~get_ss_r proc~wham_get_eig_deleig wham_get_eig_deleig proc~calctdfanddos->proc~wham_get_eig_deleig proc~dos_main dos_main proc~dos_main->proc~get_hh_r proc~dos_main->proc~get_ss_r proc~dos_main->proc~wham_get_eig_deleig proc~geninterp_main geninterp_main proc~geninterp_main->proc~get_hh_r proc~geninterp_main->proc~wham_get_eig_deleig proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->proc~get_aa_r proc~gyrotropic_main->proc~get_bb_r proc~gyrotropic_main->proc~get_cc_r proc~gyrotropic_main->proc~get_hh_r proc~gyrotropic_main->proc~get_ss_r proc~gyrotropic_get_k_list gyrotropic_get_k_list proc~gyrotropic_main->proc~gyrotropic_get_k_list proc~k_path k_path proc~k_path->proc~get_aa_r proc~k_path->proc~get_bb_r proc~k_path->proc~get_cc_r proc~k_path->proc~get_hh_r proc~k_path->proc~get_shc_r proc~k_path->proc~get_ss_r proc~k_path->proc~berry_get_imfgh_klist proc~k_path->proc~berry_get_shc_klist proc~k_path->proc~berry_get_imf_klist proc~k_slice k_slice proc~k_slice->proc~get_aa_r proc~k_slice->proc~get_bb_r proc~k_slice->proc~get_cc_r proc~k_slice->proc~get_hh_r proc~k_slice->proc~get_shc_r proc~k_slice->proc~get_ss_r proc~k_slice->proc~wham_get_eig_deleig proc~k_slice->proc~berry_get_imfgh_klist proc~k_slice->proc~berry_get_shc_klist proc~k_slice->proc~berry_get_imf_klist proc~spin_get_moment spin_get_moment proc~spin_get_moment->proc~get_hh_r proc~spin_get_moment->proc~get_ss_r proc~wham_get_eig_deleig->proc~get_hh_r proc~wham_get_eig_uu_hh_aa_sc wham_get_eig_UU_HH_AA_sc proc~wham_get_eig_uu_hh_aa_sc->proc~get_hh_r proc~wham_get_eig_uu_hh_aa_sc_tb_conv wham_get_eig_UU_HH_AA_sc_TB_conv proc~wham_get_eig_uu_hh_aa_sc_tb_conv->proc~get_aa_r proc~wham_get_eig_uu_hh_aa_sc_tb_conv->proc~get_hh_r proc~wham_get_eig_uu_hh_jjlist wham_get_eig_UU_HH_JJlist proc~wham_get_eig_uu_hh_jjlist->proc~get_hh_r proc~berry_get_imfgh_klist->proc~wham_get_eig_uu_hh_jjlist proc~berry_get_kdotp->proc~wham_get_eig_deleig proc~berry_get_kdotp->proc~wham_get_eig_uu_hh_aa_sc proc~berry_get_kubo_k->proc~wham_get_eig_deleig proc~berry_get_sc_klist->proc~wham_get_eig_deleig proc~berry_get_sc_klist->proc~wham_get_eig_uu_hh_aa_sc proc~berry_get_sc_klist->proc~wham_get_eig_uu_hh_aa_sc_tb_conv proc~berry_get_shc_klist->proc~wham_get_eig_deleig proc~boltzwann_main boltzwann_main proc~boltzwann_main->proc~calctdfanddos proc~gyrotropic_get_k_list->proc~wham_get_eig_deleig proc~gyrotropic_get_k_list->proc~berry_get_imfgh_klist proc~gyrotropic_get_k_list->proc~berry_get_imf_klist program~postw90 postw90 program~postw90->proc~berry_main program~postw90->proc~dos_main program~postw90->proc~geninterp_main program~postw90->proc~gyrotropic_main program~postw90->proc~k_path program~postw90->proc~k_slice program~postw90->proc~spin_get_moment program~postw90->proc~boltzwann_main proc~berry_get_imf_klist->proc~berry_get_imfgh_klist

Source Code

  subroutine operator_wigner_setup(ws_distance, ws_region, wigner_seitz, num_wann, op_R, op_R_opt_ws)
    !==========================================================================
    !
    ! Also, divide real-space matrix elements with the degeneracy factor.
    ! For use_ws_distance = true, reorder the real-space grid index
    ! using ir_ind_ws_to_pw90.
    !
    ! After this routine, irvec_pw90, crvec_pw90, and nrpts_pw90 can be
    ! used in the fourier_R_to_k routines, irrespective of use_ws_distance.
    !
    !==========================================================================

    use w90_constants, only: dp, cmplx_0
    use w90_types, only: ws_region_type, ws_distance_type
    use w90_postw90_types, only: wigner_seitz_type

    type(ws_distance_type), intent(in) :: ws_distance
    type(ws_region_type), intent(in) :: ws_region
    type(wigner_seitz_type), intent(in) :: wigner_seitz

    integer, intent(in) :: num_wann
    complex(kind=dp), intent(in) :: op_R(num_wann, num_wann, wigner_seitz%nrpts)
    !! operator in real-space grid, before applying ndegen
    complex(kind=dp), intent(inout) :: op_R_opt_ws(num_wann, num_wann, wigner_seitz%nrpts_pw90)
    !! operator in real-space grid, after applying ndegen

    integer :: ir, jr, i, j, ideg

    op_R_opt_ws = cmplx_0

    if (ws_region%use_ws_distance) then

      do ir = 1, wigner_seitz%nrpts
        do j = 1, num_wann
          do i = 1, num_wann
            do ideg = 1, ws_distance%ndeg(i, j, ir)
              jr = wigner_seitz%ir_ind_ws_to_pw90(ideg, i, j, ir)
              op_R_opt_ws(i, j, jr) = op_R_opt_ws(i, j, jr) &
                                      + op_R(i, j, ir)/real(wigner_seitz%ndegen(ir)* &
                                                            ws_distance%ndeg(i, j, ir), dp)
            end do
          end do
        end do
      end do

    else ! .not. use_ws_distance
      ! Note that nrpts_pw90 == nrpts if use_ws_distance == .false.
      do ir = 1, wigner_seitz%nrpts
        op_R_opt_ws(:, :, ir) = op_R(:, :, ir)/real(wigner_seitz%ndegen(ir), dp)
      end do
    end if ! use_ws_distance

  end subroutine operator_wigner_setup