def calculate_chirality(tag, center, radius, overwrite=False, **kwargs): # converting the Model to the pickle format (which is quicker to load) # Note that keeping only the pickle format is dangerous, because it # may become unreadable -- use the JSON format for long-term saving. try: with open(MODEL_PATH, 'rb') as f: model = pickle.load(f) except IOError: # The .xz compression is used to avoid the GitHub file size limit with lzma.open(MODEL_SOURCE + '.xz') as fin, open(MODEL_SOURCE, 'wb') as fout: fout.write(fin.read()) model = Model.from_json_file(MODEL_SOURCE) with open(MODEL_PATH, 'wb') as f: pickle.dump(model, f, protocol=pickle.HIGHEST_PROTOCOL) system = z2pack.tb.System(model) full_name = MODEL_NAME + '_' + tag res = z2pack.surface.run(system=system, surface=z2pack.shape.Sphere(center, radius), save_file=os.path.join('results', full_name + '.p'), load=not overwrite, **kwargs) # Again, the pickle format is used because it is faster than JSON # or msgpack. If you wish to permanently store the result, use # z2pack.io.save(res, os.path.join('results', full_name + '.json')) print('Chern number:', z2pack.invariant.chern(res))
def __init__(self, folder, prefix): """ folder # The folder containing the Wannier function files prefix, # The prefix of Wannier90 outputs. e.g. wannier90_up """ m = Model.from_wannier_folder(folder=folder, prefix=prefix) self.model = ijR.from_tbmodel(m)
def from_tbmodel_hdf5(fname): from tbmodels import Model m = Model.from_hdf5_file(fname) ret = ijR(nbasis=m.size) for R, v in m.hop.items(): ret.data[R] = v ret.positions = np.reshape(m.pos, (m.size, 3)) return ret
def from_tbmodel_hdf5(fname): """ load model from a hdf5 file. It uses the tbmodel parser. """ from tbmodels import Model m = Model.from_hdf5_file(fname) ret = MyTB(nbasis=m.size) for R, v in m.hop.items(): ret.data[R] = v ret.positions = np.reshape(m.pos, (m.size, m.ndim)) return ret
def save_Wannier_model(): m = Model.from_wannier_folder(folder='/home/hexu/projects/SMO_Wannier/', prefix='abinito_w90_down') mijR = ijR.from_tbmodel(m) mijR.save(fname='SMO_tb.nc')