w90_postw90_common Module

This contains the common variables and procedures needed to set up a Wannier interpolatation calculation for any physical property


Uses

  • module~~w90_postw90_common~~UsesGraph module~w90_postw90_common w90_postw90_common module~w90_comms w90_comms module~w90_postw90_common->module~w90_comms module~w90_constants w90_constants module~w90_postw90_common->module~w90_constants module~w90_comms->module~w90_constants module~w90_io w90_io module~w90_comms->module~w90_io module~w90_io->module~w90_constants

Used by

  • module~~w90_postw90_common~~UsedByGraph module~w90_postw90_common w90_postw90_common program~postw90 postw90 program~postw90->module~w90_postw90_common module~w90_geninterp w90_geninterp program~postw90->module~w90_geninterp module~w90_boltzwann w90_boltzwann program~postw90->module~w90_boltzwann proc~dos_get_levelspacing dos_get_levelspacing proc~dos_get_levelspacing->module~w90_postw90_common proc~gyrotropic_get_noa_k gyrotropic_get_NOA_k proc~gyrotropic_get_noa_k->module~w90_postw90_common proc~k_path k_path proc~k_path->module~w90_postw90_common proc~get_shc_r get_SHC_R proc~get_shc_r->module~w90_postw90_common proc~get_cc_r get_CC_R proc~get_cc_r->module~w90_postw90_common proc~get_ff_r get_FF_R proc~get_ff_r->module~w90_postw90_common proc~spin_get_moment_k spin_get_moment_k proc~spin_get_moment_k->module~w90_postw90_common proc~k_slice k_slice proc~k_slice->module~w90_postw90_common proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->module~w90_postw90_common proc~dos_main dos_main proc~dos_main->module~w90_postw90_common proc~get_gauge_overlap_matrix get_gauge_overlap_matrix proc~get_gauge_overlap_matrix->module~w90_postw90_common module~w90_geninterp->module~w90_postw90_common proc~wham_get_eig_deleig_tb_conv wham_get_eig_deleig_TB_conv proc~wham_get_eig_deleig_tb_conv->module~w90_postw90_common proc~fourier_q_to_r fourier_q_to_R proc~fourier_q_to_r->module~w90_postw90_common proc~berry_get_sc_klist berry_get_sc_klist proc~berry_get_sc_klist->module~w90_postw90_common proc~get_bb_r get_BB_R proc~get_bb_r->module~w90_postw90_common proc~get_aa_r get_AA_R proc~get_aa_r->module~w90_postw90_common proc~wham_get_eig_deleig wham_get_eig_deleig proc~wham_get_eig_deleig->module~w90_postw90_common 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->module~w90_postw90_common proc~wham_get_eig_uu_hh_aa_sc wham_get_eig_UU_HH_AA_sc proc~wham_get_eig_uu_hh_aa_sc->module~w90_postw90_common proc~get_ss_r get_SS_R proc~get_ss_r->module~w90_postw90_common proc~gyrotropic_get_k_list gyrotropic_get_k_list proc~gyrotropic_get_k_list->module~w90_postw90_common proc~spin_get_moment spin_get_moment proc~spin_get_moment->module~w90_postw90_common proc~berry_get_imfgh_klist berry_get_imfgh_klist proc~berry_get_imfgh_klist->module~w90_postw90_common proc~wham_get_eig_uu_hh_jjlist wham_get_eig_UU_HH_JJlist proc~wham_get_eig_uu_hh_jjlist->module~w90_postw90_common proc~get_hh_r get_HH_R proc~get_hh_r->module~w90_postw90_common module~w90_boltzwann->module~w90_postw90_common proc~berry_main berry_main proc~berry_main->module~w90_postw90_common proc~berry_get_shc_klist berry_get_shc_klist proc~berry_get_shc_klist->module~w90_postw90_common proc~spin_get_s spin_get_S proc~spin_get_s->module~w90_postw90_common proc~wham_get_d_h_a wham_get_D_h_a proc~wham_get_d_h_a->module~w90_postw90_common proc~wham_get_occ_mat_list wham_get_occ_mat_list proc~wham_get_occ_mat_list->module~w90_postw90_common proc~spin_get_nk spin_get_nk proc~spin_get_nk->module~w90_postw90_common proc~berry_get_kubo_k berry_get_kubo_k proc~berry_get_kubo_k->module~w90_postw90_common

Contents


Variables

TypeVisibility AttributesNameInitial
integer, public, allocatable:: irvec(:,:)
real(kind=dp), public, allocatable:: crvec(:,:)
integer, public, allocatable:: ndegen(:)
integer, public :: nrpts
integer, public :: rpt_origin
integer, private :: max_int_kpts_on_node
integer, private :: num_int_kpts
integer, public, allocatable:: num_int_kpts_on_node(:)
real(kind=dp), public, allocatable:: int_kpts(:,:)
real(kind=dp), public, allocatable:: weight(:)
complex(kind=dp), public, allocatable:: v_matrix(:,:,:)

Interfaces

public interface pw90common_kmesh_spacing

  • private function kmesh_spacing_singleinteger(num_points)

    Set up the value of the interpolation mesh spacing, needed for adaptive smearing [see Eqs. (34-35) YWVS07]. Choose it as the largest of the three Delta_k's for each of the primitive translations b1, b2, and b3

    Arguments

    Type IntentOptional AttributesName
    integer, intent(in) :: num_points

    Return Value real(kind=dp)

  • private function kmesh_spacing_mesh(mesh)

    Same as kmesh_spacing_singleinteger, but for a kmesh with three different mesh samplings along the three directions

    Arguments

    Type IntentOptional AttributesName
    integer, intent(in), dimension(3):: mesh

    Return Value real(kind=dp)


Functions

private function kmesh_spacing_singleinteger(num_points)

Set up the value of the interpolation mesh spacing, needed for adaptive smearing [see Eqs. (34-35) YWVS07]. Choose it as the largest of the three Delta_k's for each of the primitive translations b1, b2, and b3

Arguments

Type IntentOptional AttributesName
integer, intent(in) :: num_points

Return Value real(kind=dp)

private function kmesh_spacing_mesh(mesh)

Same as kmesh_spacing_singleinteger, but for a kmesh with three different mesh samplings along the three directions

Arguments

Type IntentOptional AttributesName
integer, intent(in), dimension(3):: mesh

Return Value real(kind=dp)


Subroutines

public subroutine pw90common_wanint_setup()

Setup data ready for interpolation

Arguments

None

public subroutine pw90common_wanint_get_kpoint_file()

read kpoints from kpoint.dat and distribute

Arguments

None

public subroutine pw90common_wanint_param_dist()

distribute the parameters across processors NOTE: we only send the ones postw90 uses, not all in w90

Arguments

None

public subroutine pw90common_wanint_data_dist()

Distribute the um and chk files

Arguments

None

public subroutine pw90common_get_occ(eig, occ, ef)

Compute the electronic occupancy

Arguments

Type IntentOptional AttributesName
real(kind=dp), intent(in) :: eig(num_wann)

Eigenvalues

real(kind=dp), intent(out) :: occ(num_wann)

Occupancy of states

real(kind=dp), intent(in) :: ef

Fermi level

public subroutine pw90common_fourier_R_to_k(kpt, OO_R, OO, alpha)

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

Read more…

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :):: OO_R
complex(kind=dp), intent(out), dimension(:, :):: OO
integer :: alpha

public subroutine pw90common_fourier_R_to_k_new(kpt, OO_R, OO, OO_dx, OO_dy, OO_dz)

For OO: For : where R_{x,y,z} are the Cartesian components of R

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :):: OO_R
complex(kind=dp), intent(out), optional dimension(:, :):: OO
complex(kind=dp), intent(out), optional dimension(:, :):: OO_dx
complex(kind=dp), intent(out), optional dimension(:, :):: OO_dy
complex(kind=dp), intent(out), optional dimension(:, :):: OO_dz

public subroutine pw90common_fourier_R_to_k_new_second_d(kpt, OO_R, OO, OO_da, OO_dadb)

For OO: For : where R_{x,y,z} are the Cartesian components of R For : where R_{xi,yi,zi} are the Cartesian components of R

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :):: OO_R
complex(kind=dp), intent(out), optional dimension(:, :):: OO
complex(kind=dp), intent(out), optional dimension(:, :, :):: OO_da
complex(kind=dp), intent(out), optional dimension(:, :, :, :):: OO_dadb

public subroutine pw90common_fourier_R_to_k_new_second_d_TB_conv(kpt, OO_R, oo_a_R, OO, OO_da, OO_dadb)

For OO: For : where R_{x,y,z} are the Cartesian components of R For : where {xi,yi,zi} denote the Cartesian components and

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :):: OO_R
complex(kind=dp), intent(in), dimension(:, :, :, :):: oo_a_R
complex(kind=dp), intent(out), optional dimension(:, :):: OO
complex(kind=dp), intent(out), optional dimension(:, :, :):: OO_da
complex(kind=dp), intent(out), optional dimension(:, :, :, :):: OO_dadb

public subroutine pw90common_fourier_R_to_k_vec(kpt, OO_R, OO_true, OO_pseudo)

For OO_true (true vector):

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :, :):: OO_R
complex(kind=dp), intent(out), optional dimension(:, :, :):: OO_true
complex(kind=dp), intent(out), optional dimension(:, :, :):: OO_pseudo

public subroutine pw90common_fourier_R_to_k_vec_dadb(kpt, OO_R, OO_da, OO_dadb)

For : For :

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :, :):: OO_R
complex(kind=dp), intent(out), optional dimension(:, :, :):: OO_da
complex(kind=dp), intent(out), optional dimension(:, :, :, :):: OO_dadb

public subroutine pw90common_fourier_R_to_k_vec_dadb_TB_conv(kpt, OO_R, OO_da, OO_dadb)

For : For :

Arguments

Type IntentOptional AttributesName
real(kind=dp) :: kpt(3)
complex(kind=dp), intent(in), dimension(:, :, :, :):: OO_R
complex(kind=dp), intent(out), optional dimension(:, :, :):: OO_da
complex(kind=dp), intent(out), optional dimension(:, :, :, :):: OO_dadb

private subroutine wigner_seitz(count_pts)

Calculates a grid of lattice vectors r that fall inside (and eventually on the surface of) the Wigner-Seitz supercell centered on the origin of the Bravais superlattice with primitive translations mp_grid(1)a_1, mp_grid(2)a_2, and mp_grid(3)*a_3

Arguments

Type IntentOptional AttributesName
logical, intent(in) :: count_pts