Calculates the Berry curvature traced over the occupied states, -2Im[f(k)] [Eq.33 CTVR06, Eq.6 LVTS12] for a list of Fermi energies, and stores it in axial-vector form
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dis_manifold_type), | intent(in) | :: | dis_manifold | |||
| real(kind=dp), | intent(in), | allocatable | :: | fermi_energy_list(:) | ||
| real(kind=dp), | intent(in) | :: | kpt_latt(:,:) | |||
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(print_output_type), | intent(in) | :: | print_output | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(inout) | :: | wigner_seitz | |||
| complex(kind=dp), | intent(inout), | allocatable | :: | AA_R(:,:,:,:) | ||
| complex(kind=dp), | intent(inout), | allocatable | :: | BB_R(:,:,:,:) | ||
| complex(kind=dp), | intent(inout), | allocatable | :: | CC_R(:,:,:,:,:) | ||
| complex(kind=dp), | intent(inout), | allocatable | :: | HH_R(:,:,:) | ||
| complex(kind=dp), | intent(in) | :: | u_matrix(:,:,:) | |||
| complex(kind=dp), | intent(in) | :: | v_matrix(:,:,:) | |||
| real(kind=dp), | intent(in) | :: | eigval(:,:) | |||
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| real(kind=dp), | intent(out) | :: | imf_k_list(:,:,:) | |||
| real(kind=dp), | intent(in) | :: | scissors_shift | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| integer, | intent(in) | :: | num_bands | |||
| integer, | intent(in) | :: | num_kpts | |||
| integer, | intent(in) | :: | num_wann | |||
| integer, | intent(in) | :: | num_valence_bands | |||
| logical, | intent(in) | :: | effective_model | |||
| logical, | intent(in) | :: | have_disentangled | |||
| character(len=50), | intent(in) | :: | seedname | |||
| integer, | intent(in) | :: | stdout | |||
| type(timer_list_type), | intent(inout) | :: | timer | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| real(kind=dp), | intent(in), | optional | :: | occ(:) | ||
| logical, | intent(in), | optional | :: | ladpt(:) |
subroutine berry_get_imf_klist(dis_manifold, fermi_energy_list, kpt_latt, ws_region, & print_output, wannier_data, ws_distance, wigner_seitz, AA_R, & BB_R, CC_R, HH_R, u_matrix, v_matrix, eigval, kpt, real_lattice, & imf_k_list, scissors_shift, mp_grid, num_bands, num_kpts, & num_wann, num_valence_bands, effective_model, have_disentangled, & seedname, stdout, timer, error, comm, occ, ladpt) !================================================! ! !! Calculates the Berry curvature traced over the occupied !! states, -2Im[f(k)] [Eq.33 CTVR06, Eq.6 LVTS12] for a list !! of Fermi energies, and stores it in axial-vector form ! !================================================! use w90_types, only: print_output_type, wannier_data_type, & dis_manifold_type, ws_region_type, ws_distance_type, timer_list_type use w90_comms, only: w90_comm_type use w90_postw90_types, only: wigner_seitz_type implicit none ! arguments type(dis_manifold_type), intent(in) :: dis_manifold real(kind=dp), allocatable, intent(in) :: fermi_energy_list(:) real(kind=dp), intent(in) :: kpt_latt(:, :) type(print_output_type), intent(in) :: print_output type(ws_region_type), intent(in) :: ws_region type(w90_comm_type), intent(in) :: comm type(wannier_data_type), intent(in) :: wannier_data type(wigner_seitz_type), intent(inout) :: wigner_seitz type(ws_distance_type), intent(inout) :: ws_distance type(timer_list_type), intent(inout) :: timer type(w90_error_type), allocatable, intent(out) :: error integer, intent(in) :: num_wann, num_bands, num_kpts, num_valence_bands integer, intent(in) :: mp_grid(3) integer, intent(in) :: stdout real(kind=dp), intent(in) :: eigval(:, :) real(kind=dp), intent(in) :: real_lattice(3, 3) real(kind=dp), intent(in) :: kpt(3) real(kind=dp), intent(out) :: imf_k_list(:, :, :) real(kind=dp), intent(in) :: scissors_shift complex(kind=dp), intent(in) :: u_matrix(:, :, :), v_matrix(:, :, :) complex(kind=dp), allocatable, intent(inout) :: AA_R(:, :, :, :) ! <0n|r|Rm> complex(kind=dp), allocatable, intent(inout) :: BB_R(:, :, :, :) ! <0|H(r-R)|R> complex(kind=dp), allocatable, intent(inout) :: CC_R(:, :, :, :, :) ! <0|r_alpha.H(r-R)_beta|R> complex(kind=dp), allocatable, intent(inout) :: HH_R(:, :, :) ! <0n|r|Rm> character(len=50), intent(in) :: seedname logical, intent(in) :: have_disentangled logical, intent(in) :: effective_model real(kind=dp), intent(in), optional :: occ(:) logical, intent(in), optional :: ladpt(:) ! local variables integer :: fermi_n fermi_n = 0 if (allocated(fermi_energy_list)) fermi_n = size(fermi_energy_list) if (present(occ)) then call berry_get_imfgh_klist(dis_manifold, fermi_energy_list, kpt_latt, ws_region, print_output, & wannier_data, ws_distance, wigner_seitz, AA_R, BB_R, CC_R, HH_R, u_matrix, & v_matrix, eigval, kpt, real_lattice, scissors_shift, mp_grid, & fermi_n, num_bands, num_kpts, num_wann, num_valence_bands, & effective_model, have_disentangled, seedname, & stdout, timer, error, comm, imf_k_list, occ=occ) if (allocated(error)) return else if (present(ladpt)) then call berry_get_imfgh_klist(dis_manifold, fermi_energy_list, kpt_latt, ws_region, print_output, & wannier_data, ws_distance, wigner_seitz, AA_R, BB_R, CC_R, HH_R, & u_matrix, v_matrix, eigval, kpt, real_lattice, scissors_shift, & mp_grid, fermi_n, num_bands, num_kpts, num_wann, & num_valence_bands, effective_model, have_disentangled, & seedname, stdout, timer, error, comm, imf_k_list, ladpt=ladpt) if (allocated(error)) return else call berry_get_imfgh_klist(dis_manifold, fermi_energy_list, kpt_latt, ws_region, print_output, & wannier_data, ws_distance, wigner_seitz, AA_R, BB_R, CC_R, HH_R, & u_matrix, v_matrix, eigval, kpt, real_lattice, scissors_shift, & mp_grid, fermi_n, num_bands, num_kpts, num_wann, & num_valence_bands, effective_model, have_disentangled, & seedname, stdout, timer, error, comm, imf_k_list) if (allocated(error)) return end if end if end subroutine berry_get_imf_klist