This contains the common variables and procedures needed to set up a Wannier interpolatation calculation for any physical property
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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | num_points | |||
| real(kind=dp), | intent(in) | :: | recip_lattice(3,3) |
Same as kmesh_spacing_singleinteger, but for a kmesh with three different mesh samplings along the three directions
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in), | dimension(3) | :: | mesh | ||
| real(kind=dp), | intent(in) | :: | recip_lattice(3,3) |
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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | num_points | |||
| real(kind=dp), | intent(in) | :: | recip_lattice(3,3) |
Same as kmesh_spacing_singleinteger, but for a kmesh with three different mesh samplings along the three directions
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in), | dimension(3) | :: | mesh | ||
| real(kind=dp), | intent(in) | :: | recip_lattice(3,3) |
Setup data ready for interpolation
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | num_wann | |||
| type(print_output_type), | intent(in) | :: | print_output | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| logical, | intent(in) | :: | effective_model | |||
| type(wigner_seitz_type), | intent(inout) | :: | wigner_seitz | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| integer, | intent(in) | :: | stdout | |||
| character(len=50), | intent(in) | :: | seedname | |||
| type(timer_list_type), | intent(inout) | :: | timer | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
read kpoints from kpoint.dat and distribute
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(kpoint_dist_type), | intent(inout) | :: | kpoint_dist | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
distribute the parameters across processors NOTE: we only send the ones postw90 uses, not all in w90
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(print_output_type), | intent(inout) | :: | print_output | |||
| type(ws_region_type), | intent(inout) | :: | ws_region | |||
| type(kmesh_info_type), | intent(inout) | :: | kmesh_info | |||
| real(kind=dp), | intent(inout), | allocatable | :: | kpt_latt(:,:) | ||
| integer, | intent(inout) | :: | num_kpts | |||
| type(dis_manifold_type), | intent(inout) | :: | dis_manifold | |||
| type(w90_system_type), | intent(inout) | :: | w90_system | |||
| real(kind=dp), | intent(inout), | allocatable | :: | fermi_energy_list(:) | ||
| integer, | intent(inout) | :: | num_bands | |||
| integer, | intent(inout) | :: | num_wann | |||
| real(kind=dp), | intent(inout), | pointer | :: | eigval(:,:) | ||
| integer, | intent(inout) | :: | mp_grid(3) | |||
| real(kind=dp), | intent(inout) | :: | real_lattice(3,3) | |||
| type(pw90_calculation_type), | intent(inout) | :: | pw90_calculation | |||
| real(kind=dp), | intent(inout) | :: | scissors_shift | |||
| logical, | intent(inout) | :: | effective_model | |||
| type(pw90_spin_mod_type), | intent(inout) | :: | pw90_spin | |||
| type(pw90_band_deriv_degen_type), | intent(inout) | :: | pw90_band_deriv_degen | |||
| type(pw90_kpath_mod_type), | intent(inout) | :: | pw90_kpath | |||
| type(pw90_kslice_mod_type), | intent(inout) | :: | pw90_kslice | |||
| type(pw90_dos_mod_type), | intent(inout) | :: | pw90_dos | |||
| type(pw90_berry_mod_type), | intent(inout) | :: | pw90_berry | |||
| type(pw90_spin_hall_type), | intent(inout) | :: | pw90_spin_hall | |||
| type(pw90_gyrotropic_type), | intent(inout) | :: | pw90_gyrotropic | |||
| type(pw90_geninterp_mod_type), | intent(inout) | :: | pw90_geninterp | |||
| type(pw90_boltzwann_type), | intent(inout) | :: | pw90_boltzwann | |||
| logical, | intent(inout) | :: | eig_found | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
Distribute the um and chk files
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | num_wann | |||
| integer, | intent(in) | :: | num_kpts | |||
| integer, | intent(in) | :: | num_bands | |||
| complex(kind=dp), | intent(inout), | allocatable | :: | u_matrix_opt(:,:,:) | ||
| complex(kind=dp), | intent(inout), | allocatable | :: | u_matrix(:,:,:) | ||
| type(dis_manifold_type), | intent(inout) | :: | dis_manifold | |||
| type(wannier_data_type), | intent(inout) | :: | wannier_data | |||
| real(kind=dp), | intent(in) | :: | scissors_shift | |||
| complex(kind=dp), | allocatable | :: | v_matrix(:,:,:) | |||
| integer, | intent(in) | :: | num_valence_bands | |||
| logical, | intent(inout) | :: | have_disentangled | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
Compute the electronic occupancy
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | ef |
Fermi level |
||
| real(kind=dp), | intent(in) | :: | eig(num_wann) |
Eigenvalues |
||
| real(kind=dp), | intent(out) | :: | occ(num_wann) |
Occupancy of states |
||
| integer, | intent(in) | :: | num_wann |
For alpha=0: O_ij(R) --> O_ij(k) = sum_R e^{+ik.R}*O_ij(R)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| complex(kind=dp), | intent(out) | :: | OO(:,:) | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:) | |||
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| integer, | intent(in) | :: | alpha | |||
| integer, | intent(in) | :: | num_wann | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
For OO: For : where R_{x,y,z} are the Cartesian components of R
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:) | |||
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| integer, | intent(in) | :: | num_wann | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| complex(kind=dp), | intent(out), | optional | :: | OO(:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_dx(:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_dy(:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_dz(:,:) |
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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:) | |||
| integer, | intent(in) | :: | num_wann | |||
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| complex(kind=dp), | intent(out), | optional | :: | OO(:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_da(:,:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | 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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:) | |||
| complex(kind=dp), | intent(in) | :: | oo_a_R(:,:,:,:) | |||
| integer, | intent(in) | :: | num_wann | |||
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| complex(kind=dp), | intent(out), | optional | :: | OO(:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_da(:,:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_dadb(:,:,:,:) |
For OO_true (true vector):
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:,:) | |||
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| integer, | intent(in) | :: | num_wann | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| complex(kind=dp), | intent(out), | optional | :: | OO_true(:,:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_pseudo(:,:,:) |
For : For :
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:,:) | |||
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| integer, | intent(in) | :: | num_wann | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| complex(kind=dp), | intent(out), | optional | :: | OO_da(:,:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_dadb(:,:,:,:) |
For : For :
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wannier_data_type), | intent(in) | :: | wannier_data | |||
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(wigner_seitz_type), | intent(in) | :: | wigner_seitz | |||
| complex(kind=dp), | intent(in) | :: | OO_R(:,:,:,:) | |||
| real(kind=dp), | intent(in) | :: | kpt(3) | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| integer, | intent(in) | :: | num_wann | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm | |||
| complex(kind=dp), | intent(out), | optional | :: | OO_da(:,:,:) | ||
| complex(kind=dp), | intent(out), | optional | :: | OO_dadb(:,:,:,:) |
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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(print_output_type), | intent(in) | :: | print_output | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | mp_grid(3) | |||
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wigner_seitz_type), | intent(inout) | :: | wigner_seitz | |||
| integer, | intent(in) | :: | stdout | |||
| logical, | intent(in) | :: | count_pts | |||
| type(timer_list_type), | intent(inout) | :: | timer | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |
If use_ws_distance = true, get list of all R vectors that appear in irdist_ws and write them to irvec_pw90. Set the index map ir_ind_ws_to_pw90
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ws_distance_type), | intent(inout) | :: | ws_distance | |||
| type(ws_region_type), | intent(in) | :: | ws_region | |||
| type(wigner_seitz_type), | intent(inout) | :: | wigner_seitz | |||
| integer, | intent(in) | :: | num_wann | |||
| real(kind=dp), | intent(in) | :: | real_lattice(3,3) | |||
| integer, | intent(in) | :: | nrpts | |||
| type(w90_error_type), | intent(out), | allocatable | :: | error | ||
| type(w90_comm_type), | intent(in) | :: | comm |