# #
# This file is distributed as part of the WannierBerri code #
# under the terms of the GNU General Public License. See the #
# file 'LICENSE' in the root directory of the WannierBerri #
# distribution, or http://www.gnu.org/copyleft/gpl.txt #
# #
# The WannierBerri code is hosted on GitHub: #
# https://github.com/stepan-tsirkin/wannier-berri #
# written by #
# Stepan Tsirkin, University of Zurich #
# some parts of this file are originate #
# from the translation of Wannier90 code #
# ---------------------------------------------------------- #
import numpy as np
from termcolor import cprint
from .system_R import System_R
from ..fourier.rvectors import Rvectors
[docs]
class System_ASE(System_R):
"""
System initialized from the Wannier functions generated by `ASE <https://wiki.fysik.dtu.dk/ase/_modules/ase/dft/wannier.html>`__ .
Parameters
----------
ase_wannier :
An object of `ASE Wannier <https://wiki.fysik.dtu.dk/ase/_modules/ase/dft/wannier.html#Wannier>`__ .
Notes
-----
see also parameters of the :class:`~wannierberri.System`
"""
def __init__(
self,
ase_wannier,
**parameters):
if "name" not in parameters:
parameters["name"] = "ASE"
super().__init__(force_internal_terms_only=True,
**parameters)
ase_wannier.translate_all_to_cell()
self.set_real_lattice(np.array(ase_wannier.unitcell_cc))
mp_grid = ase_wannier.kptgrid
self.num_wann = ase_wannier.nwannier
self.num_kpts = ase_wannier.Nk
self.wannier_centers_cart = ase_wannier.get_centers()
print(f"got the Wannier centers : {self.wannier_centers_cart}")
self.rvec = Rvectors(lattice=self.real_lattice, shifts_left_red=self.wannier_centers_red)
self.rvec.set_Rvec(mp_grid=mp_grid, ws_tolerance=self.ws_dist_tol)
self.rvec.set_fft_q_to_R(
kpt_red=ase_wannier.kpt_kc
)
Ham = np.zeros(tuple(mp_grid) + (self.num_wann, self.num_wann), dtype=complex)
for i in range(mp_grid[0]):
for j in range(mp_grid[1]):
for k in range(mp_grid[2]):
Ham[i, j, k] = ase_wannier.get_hopping([i, j, k])
self.set_R_mat('Ham', self.rvec.remap_XX_from_grid_to_list_R(Ham))
self.do_at_end_of_init()
cprint("Reading the ASE system finished successfully", 'green', attrs=['bold'])