def run(**kwargs): """ Run AMSET on an ab initio band structure """ from amset.constants import defaults from amset.log import initialize_amset_logger from amset.core.run import AmsetRunner if kwargs["print_log"] is not False: initialize_amset_logger() settings_override: Dict[str, Dict[str, Any]] = defaultdict(dict) for setting in defaults: if setting in kwargs and kwargs[setting] is not None: settings_override[setting] = kwargs[setting] runner = AmsetRunner.from_directory( directory=kwargs["directory"], vasprun=kwargs["vasprun"], settings_file=kwargs["settings"], settings_override=settings_override, ) runner.run()
def test_get_energies_interpolater(self): initialize_amset_logger() amset_data = self.interpolater.get_amset_data() energies, velocities, projections, sym_info = self.interpolater.get_energies( amset_data.kpoints, None, return_velocity=True, atomic_units=True, curvature=False, return_projections=True, symprec=0.1, return_vel_outer_prod=True, return_kpoint_mapping=True, ) np.testing.assert_array_almost_equal(energies[Spin.up], amset_data.energies[Spin.up]) np.testing.assert_array_almost_equal( velocities[Spin.up], amset_data.velocities_product[Spin.up]) for l in projections[Spin.up]: np.testing.assert_array_almost_equal( projections[Spin.up][l], amset_data._projections[Spin.up][l]) np.testing.assert_array_equal(sym_info["ir_kpoints_idx"], amset_data.ir_kpoints_idx) np.testing.assert_array_equal(sym_info["ir_to_full_idx"], amset_data.ir_to_full_kpoint_mapping)
def _run_wrapper(self, directory: Union[str, Path] = ".", prefix: Optional[str] = None): if self.settings["print_log"]: log_file = "{}_amset.log".format(prefix) if prefix else "amset.log" initialize_amset_logger(directory=directory, filename=log_file) tt = time.perf_counter() _log_amset_intro() _log_settings(self) _log_structure_information(self._band_structure.structure, self.settings["symprec"]) _log_band_structure_information(self._band_structure) amset_data, interpolation_time = self._do_interpolation() timing = {"interpolation": interpolation_time} amset_data, dos_time = self._do_dos(amset_data) timing["dos"] = dos_time amset_data, scattering_time = self._do_scattering(amset_data) timing["scattering"] = scattering_time amset_data, transport_time = self._do_transport(amset_data) timing["transport"] = scattering_time filepath, writing_time = self._do_writing(amset_data, directory, prefix) timing["writing"] = writing_time timing["total"] = time.perf_counter() - tt return amset_data, timing
def __init__(self, data, interpolation_factor=1, print_log=defaults["print_log"]): super().__init__(data) self.interpolation_factor = interpolation_factor if print_log: initialize_amset_logger(filename="amset_lineshape_plot.log")
def __init__( self, data, interpolation_factor=5, print_log=defaults["print_log"], symprec=defaults["symprec"], ): super().__init__(data) self.interpolation_factor = interpolation_factor if print_log: initialize_amset_logger(filename="lineshape.log") self.symprec = symprec
def _run_wrapper(self, directory: Union[str, Path] = ".", prefix: Optional[str] = None): if self.settings["print_log"] or self.settings["write_log"]: if self.settings["write_log"]: log_file = "{}_amset.log".format( prefix) if prefix else "amset.log" else: log_file = False initialize_amset_logger( directory=directory, filename=log_file, print_log=self.settings["print_log"], ) self._check_wavefunction() tt = time.perf_counter() _log_amset_intro() _log_settings(self) _log_structure_information(self._band_structure.structure, self.settings["symprec"]) _log_band_structure_information(self._band_structure) amset_data, interpolation_time = self._do_interpolation() timing = {"interpolation": interpolation_time} amset_data, dos_time = self._do_dos(amset_data) timing["dos"] = dos_time amset_data, scattering_time = self._do_scattering(amset_data) timing["scattering"] = scattering_time if isinstance(self.settings["fd_tol"], numeric_types): amset_data, timing = self._do_fd_tol(amset_data, directory, prefix, timing) else: amset_data, timing = self._do_many_fd_tol(amset_data, self.settings["fd_tol"], directory, prefix, timing) timing["total"] = time.perf_counter() - tt return amset_data, timing
def __init__( self, bandstructure: BandStructure, nelect: int, soc: bool = False, interpolation_factor=defaults["interpolation_factor"], print_log=defaults["print_log"], symprec=defaults["symprec"], energy_cutoff=None, ): if print_log: initialize_amset_logger(filename="amset_electronic_structure_plot.log") self.symprec = symprec self.interpolater = Interpolator( bandstructure, nelect, interpolation_factor=interpolation_factor, soc=soc ) self.structure = bandstructure.structure self.energy_cutoff = energy_cutoff
def test_get_energies_symprec(self): # vr = Vasprun(os.path.join(tin_dioxide_files, 'vasprun.xml.gz'), # parse_projected_eigen=True) vr = Vasprun(os.path.join(pbs_files, "vasprun.xml.gz"), parse_projected_eigen=True) bs = vr.get_band_structure() num_electrons = vr.parameters["NELECT"] interpolater = Interpolator(bs, num_electrons, interpolate_projections=True, interpolation_factor=1) ir_kpoints, weights, kpoints, ir_kpoints_idx, ir_to_full_idx = get_kpoints( [13, 15, 29], vr.final_structure, boltztrap_ordering=True, return_full_kpoints=True, ) initialize_amset_logger() ( energies, velocities, curvature, projections, sym_info, ) = interpolater.get_energies( kpoints, None, return_velocity=True, atomic_units=True, return_curvature=True, return_projections=True, symprec=0.1, return_vel_outer_prod=True, return_kpoint_mapping=True, ) ( energies_no_sym, velocities_no_sym, curvature_no_sym, projections_no_sym, ) = interpolater.get_energies( kpoints, None, return_velocity=True, atomic_units=True, return_curvature=True, return_projections=True, return_vel_outer_prod=True, symprec=None, ) np.testing.assert_array_equal(ir_to_full_idx, sym_info["ir_to_full_idx"]) np.testing.assert_array_equal(ir_kpoints_idx, sym_info["ir_kpoints_idx"]) # print(velocities[Spin.up][5, :, :, -3:]) # print(velocities_no_sym[Spin.up][5, :, :, -3:]) # print(sym_info["ir_to_full_idx"][-10:]) np.testing.assert_array_almost_equal(energies[Spin.up], energies_no_sym[Spin.up], decimal=12) np.testing.assert_array_almost_equal(velocities[Spin.up], velocities_no_sym[Spin.up], decimal=12) np.testing.assert_array_almost_equal(curvature[Spin.up], curvature_no_sym[Spin.up], decimal=12) for l in projections[Spin.up]: np.testing.assert_array_almost_equal( projections[Spin.up][l], projections_no_sym[Spin.up][l])