This contains the common variables and procedures needed to set up a Wannier interpolatation calculation for any physical property
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
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(:,:,:) |
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 |
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 |
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 |
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 |
Setup data ready for interpolation
read kpoints from kpoint.dat and distribute
distribute the parameters across processors NOTE: we only send the ones postw90 uses, not all in w90
Distribute the um and chk files
Compute the electronic occupancy
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
For alpha=0: O_ij(R) --> O_ij(k) = sum_R e^{+ik.R}*O_ij(R)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp) | :: | kpt(3) | ||||
complex(kind=dp), | intent(in), | dimension(:, :, :) | :: | OO_R | ||
complex(kind=dp), | intent(out), | dimension(:, :) | :: | OO | ||
integer | :: | alpha |
For OO: For : where R_{x,y,z} are the Cartesian components of R
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
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) | :: | 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 |
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) | :: | 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 |
For OO_true (true vector):
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
For : For :
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
For : For :
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
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 | ||
---|---|---|---|---|---|---|
logical, | intent(in) | :: | count_pts |