Source code for wannierberri.system.system_ASE

#                                                            #
# 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'])