get_gauge_overlap_matrix Subroutine

public subroutine get_gauge_overlap_matrix(num_bands, num_wann, eigval, v_matrix, dis_manifold, ik_a, ns_a, ik_b, ns_b, S_o, have_disentangled, S, H)

Uses

  • proc~~get_gauge_overlap_matrix~~UsesGraph proc~get_gauge_overlap_matrix get_gauge_overlap_matrix module~w90_types w90_types proc~get_gauge_overlap_matrix->module~w90_types module~w90_utility w90_utility proc~get_gauge_overlap_matrix->module~w90_utility module~w90_constants w90_constants module~w90_types->module~w90_constants module~w90_comms w90_comms module~w90_utility->module~w90_comms module~w90_utility->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
integer, intent(in) :: num_bands
integer, intent(in) :: num_wann
real(kind=dp), intent(in) :: eigval(:,:)
complex(kind=dp), intent(in) :: v_matrix(:,:,:)
type(dis_manifold_type), intent(in) :: dis_manifold
integer, intent(in) :: ik_a
integer, intent(in) :: ns_a
integer, intent(in) :: ik_b
integer, intent(in) :: ns_b
complex(kind=dp), intent(in) :: S_o(:,:)
logical, intent(in) :: have_disentangled
complex(kind=dp), intent(out), optional :: S(:,:)
complex(kind=dp), intent(out), optional :: H(:,:)

Calls

proc~~get_gauge_overlap_matrix~~CallsGraph proc~get_gauge_overlap_matrix get_gauge_overlap_matrix proc~get_win_min get_win_min proc~get_gauge_overlap_matrix->proc~get_win_min proc~utility_zgemmm utility_zgemmm proc~get_gauge_overlap_matrix->proc~utility_zgemmm proc~utility_zgemm_new utility_zgemm_new proc~utility_zgemmm->proc~utility_zgemm_new zgemm zgemm proc~utility_zgemm_new->zgemm

Called by

proc~~get_gauge_overlap_matrix~~CalledByGraph proc~get_gauge_overlap_matrix get_gauge_overlap_matrix proc~get_aa_r get_AA_R proc~get_aa_r->proc~get_gauge_overlap_matrix proc~get_bb_r get_BB_R proc~get_bb_r->proc~get_gauge_overlap_matrix proc~get_cc_r get_CC_R proc~get_cc_r->proc~get_gauge_overlap_matrix proc~get_sh_r get_SH_R proc~get_sh_r->proc~get_gauge_overlap_matrix proc~get_shc_r get_SHC_R proc~get_shc_r->proc~get_gauge_overlap_matrix proc~get_ss_r get_SS_R proc~get_ss_r->proc~get_gauge_overlap_matrix 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_sh_r proc~berry_main->proc~get_shc_r proc~berry_main->proc~get_ss_r proc~berry_get_sc_klist berry_get_sc_klist proc~berry_main->proc~berry_get_sc_klist proc~calctdfanddos calcTDFandDOS proc~calctdfanddos->proc~get_ss_r proc~dos_main dos_main proc~dos_main->proc~get_ss_r 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_ss_r 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_shc_r proc~k_path->proc~get_ss_r 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_shc_r proc~k_slice->proc~get_ss_r proc~spin_get_moment spin_get_moment proc~spin_get_moment->proc~get_ss_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~berry_get_sc_klist->proc~wham_get_eig_uu_hh_aa_sc_tb_conv proc~boltzwann_main boltzwann_main proc~boltzwann_main->proc~calctdfanddos program~postw90 postw90 program~postw90->proc~berry_main program~postw90->proc~dos_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

Source Code

  subroutine get_gauge_overlap_matrix(num_bands, num_wann, eigval, v_matrix, dis_manifold, ik_a, &
                                      ns_a, ik_b, ns_b, S_o, have_disentangled, S, H)
    !================================================
    !
    ! Wannier-gauge overlap matrix S in the projected subspace
    !
    ! TODO: Update this documentation of this routine and
    ! possibliy give it a better name. The routine has been
    ! generalized multiple times.
    !
    !================================================

    use w90_types, only: dis_manifold_type
    use w90_utility, only: utility_zgemmm

    implicit none

    ! arguments
    type(dis_manifold_type), intent(in) :: dis_manifold
    real(kind=dp), intent(in) :: eigval(:, :)
    complex(kind=dp), intent(in) :: S_o(:, :), v_matrix(:, :, :)
    integer, intent(in) :: num_wann, num_bands, ik_a, ns_a, ik_b, ns_b
    logical, intent(in) :: have_disentangled

    complex(kind=dp), intent(out), optional :: S(:, :), H(:, :)

    ! local variables
    integer :: wm_a, wm_b

    call get_win_min(num_bands, dis_manifold, ik_a, wm_a, have_disentangled)
    call get_win_min(num_bands, dis_manifold, ik_b, wm_b, have_disentangled)

    call utility_zgemmm(v_matrix(1:ns_a, 1:num_wann, ik_a), 'C', &
                        S_o(wm_a:wm_a + ns_a - 1, wm_b:wm_b + ns_b - 1), 'N', &
                        v_matrix(1:ns_b, 1:num_wann, ik_b), 'N', &
                        S, eigval(wm_a:wm_a + ns_a - 1, ik_a), H)

  end subroutine get_gauge_overlap_matrix