ws_apply_ndegen Subroutine

public subroutine ws_apply_ndegen(ws_distance, use_ws_distance, num_wann, nrpts, ndegen, nrpts_full, ir_map, op_R, op_R_full)

Uses

  • proc~~ws_apply_ndegen~~UsesGraph proc~ws_apply_ndegen ws_apply_ndegen module~w90_constants w90_constants proc~ws_apply_ndegen->module~w90_constants module~w90_types w90_types proc~ws_apply_ndegen->module~w90_types module~w90_types->module~w90_constants

Divide a real-space operator by its degeneracy weights and spread it over the expanded lattice-vector list built by ws_expand_rvec, so that it can be Fourier transformed with a plain sum over exp(i k.R), irrespective of use_ws_distance.

Arguments

Type IntentOptional Attributes Name
type(ws_distance_type), intent(in) :: ws_distance
logical, intent(in) :: use_ws_distance
integer, intent(in) :: num_wann
integer, intent(in) :: nrpts
integer, intent(in) :: ndegen(nrpts)
integer, intent(in) :: nrpts_full
integer, intent(in) :: ir_map(:,:,:,:)
complex(kind=dp), intent(in) :: op_R(num_wann,num_wann,nrpts)

operator on the folded grid, before applying the degeneracy weights

complex(kind=dp), intent(out) :: op_R_full(num_wann,num_wann,nrpts_full)

operator on the expanded grid, after applying the degeneracy weights


Called by

proc~~ws_apply_ndegen~~CalledByGraph proc~ws_apply_ndegen ws_apply_ndegen proc~hamiltonian_get_rmn hamiltonian_get_rmn proc~hamiltonian_get_rmn->proc~ws_apply_ndegen proc~operator_wigner_setup operator_wigner_setup proc~operator_wigner_setup->proc~ws_apply_ndegen proc~plot_main plot_main proc~plot_main->proc~ws_apply_ndegen proc~plot_main->proc~hamiltonian_get_rmn 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~w90_plot w90_plot proc~w90_plot->proc~plot_main 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 program~wannier wannier program~wannier->proc~w90_plot 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 ws_apply_ndegen(ws_distance, use_ws_distance, num_wann, nrpts, ndegen, &
                             nrpts_full, ir_map, op_R, op_R_full)
    !================================================!
    !! Divide a real-space operator by its degeneracy weights and spread it over
    !! the expanded lattice-vector list built by ws_expand_rvec, so that it can be
    !! Fourier transformed with a plain sum over exp(i k.R), irrespective of
    !! use_ws_distance.
    !================================================!

    use w90_constants, only: cmplx_0
    use w90_types, only: ws_distance_type

    implicit none

    type(ws_distance_type), intent(in) :: ws_distance

    logical, intent(in) :: use_ws_distance
    integer, intent(in) :: num_wann
    integer, intent(in) :: nrpts
    integer, intent(in) :: ndegen(nrpts)
    integer, intent(in) :: nrpts_full
    integer, intent(in) :: ir_map(:, :, :, :)

    complex(kind=dp), intent(in) :: op_R(num_wann, num_wann, nrpts)
    !! operator on the folded grid, before applying the degeneracy weights
    complex(kind=dp), intent(out) :: op_R_full(num_wann, num_wann, nrpts_full)
    !! operator on the expanded grid, after applying the degeneracy weights

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

    if (use_ws_distance) then
      op_R_full = cmplx_0
      do ir = 1, nrpts
        do j = 1, num_wann
          do i = 1, num_wann
            do ideg = 1, ws_distance%ndeg(i, j, ir)
              jr = ir_map(ideg, i, j, ir)
              op_R_full(i, j, jr) = op_R_full(i, j, jr) &
                                    + op_R(i, j, ir)/real(ndegen(ir)*ws_distance%ndeg(i, j, ir), dp)
            end do
          end do
        end do
      end do
    else
      ! nrpts_full == nrpts in this case
      do ir = 1, nrpts
        op_R_full(:, :, ir) = op_R(:, :, ir)/real(ndegen(ir), dp)
      end do
    end if
    !================================================!
  end subroutine ws_apply_ndegen