Example #1
0
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()
Example #2
0
    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)
Example #3
0
    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
Example #4
0
    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")
Example #5
0
    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
Example #6
0
    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
Example #8
0
    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])