Exemplo n.º 1
0
 def write_kappa(self, filename):
     temperatures = self.get_temperatures()
     for i, sigma in enumerate(self._sigmas):
         kappa = self._kappa[i]
         write_kappa_to_hdf5(self._gamma[i],
                             temperatures,
                             self.get_mesh_numbers(),
                             frequency=self.get_frequencies(),
                             group_velocity=self.get_group_velocities(),
                             heat_capacity=self.get_mode_heat_capacities(),
                             kappa=kappa,
                             qpoint=self.get_qpoints(),
                             weight=self.get_grid_weights(),
                             mesh_divisors=self.get_mesh_divisors(),
                             sigma=sigma,
                             filename=filename,
                             gnu=(self._gamma_N[i],self._gamma_U[i]))
         if self._write_tecplot:
             for j,temp in enumerate(temperatures):
                 write_kappa_to_tecplot_BZ(np.where(self._gamma[i,:,j]>1e-8, self._gamma[i,:,j],0),
                                        temp,
                                        self.get_mesh_numbers(),
                                        bz_q_address=self._bz_grid_address / self.get_mesh_numbers().astype(float),
                                        tetrahedrdons=self._unique_vertices,
                                        bz_to_pp_mapping=self._bz_to_pp_map,
                                        rec_lattice=np.linalg.inv(self._primitive.get_cell()),
                                        spg_indices_mapping=self._irr_index_mapping,
                                        spg_rotation_mapping=self._rot_mappings,
                                        frequency=self.get_frequencies(),
                                        group_velocity=self.get_group_velocities(),
                                        heat_capacity=self.get_mode_heat_capacities()[:,j],
                                        kappa=kappa[:,j],
                                        weight=self.get_grid_weights(),
                                        sigma=sigma,
                                        filename=filename+"-bz")
Exemplo n.º 2
0
def _write_kappa(br, filename=None, log_level=0):
    temperatures = br.get_temperatures()
    sigmas = br.get_sigmas()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    frequencies = br.get_frequencies()
    gv = br.get_group_velocities()
    mode_cv = br.get_mode_heat_capacities()
    ave_pp = br.get_averaged_pp_interaction()
    qpoints = br.get_qpoints()
    weights = br.get_grid_weights()
    kappa = br.get_kappa()
    mode_kappa = br.get_mode_kappa()
    num_ignored_phonon_modes = br.get_number_of_ignored_phonon_modes()
    num_band = br.get_frequencies().shape[1]
    num_phonon_modes = br.get_number_of_sampling_grid_points() * num_band

    for i, sigma in enumerate(sigmas):
        kappa_at_sigma = kappa[i]
        if gamma_isotope is not None:
            gamma_isotope_at_sigma = gamma_isotope[i]
        else:
            gamma_isotope_at_sigma = None
        if log_level:
            print "----------- Thermal conductivity (W/m-k)",
            if sigma:
                print "for sigma=%s -----------" % sigma
            else:
                print "with tetrahedron method -----------"
            if log_level > 1:
                print("#%6s     " + " %-9s" * 6 +
                      "#ipm") % ("T(K)", "xx", "yy", "zz", "yz", "xz", "xy")
                for j, (t, k) in enumerate(zip(temperatures, kappa_at_sigma)):
                    print("%7.1f" + " %9.3f" * 6 + " %d/%d") % (
                        (t, ) + tuple(k) +
                        (num_ignored_phonon_modes[i, j], num_phonon_modes))
            else:
                print("#%6s     " + " %-9s" * 6) % ("T(K)", "xx", "yy", "zz",
                                                    "yz", "xz", "xy")
                for j, (t, k) in enumerate(zip(temperatures, kappa_at_sigma)):
                    print("%7.1f" + " %9.3f" * 6) % ((t, ) + tuple(k))
            print

        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            heat_capacity=mode_cv,
                            kappa=kappa_at_sigma,
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            gamma_isotope=gamma_isotope_at_sigma,
                            averaged_pp_interaction=ave_pp,
                            qpoint=qpoints,
                            weight=weights,
                            mesh_divisors=mesh_divisors,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 3
0
def _write_kappa(lbte, filename=None, log_level=0):
    temperatures = lbte.get_temperatures()
    sigmas = lbte.get_sigmas()
    gamma = lbte.get_gamma()
    mesh = lbte.get_mesh_numbers()
    frequencies = lbte.get_frequencies()
    gv = lbte.get_group_velocities()
    ave_pp = lbte.get_averaged_pp_interaction()
    qpoints = lbte.get_qpoints()
    kappa = lbte.get_kappa()
    mode_kappa = lbte.get_mode_kappa()
    
    coleigs = lbte.get_collision_eigenvalues()

    for i, sigma in enumerate(sigmas):
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            kappa=kappa[i],
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            averaged_pp_interaction=ave_pp,
                            qpoint=qpoints,
                            sigma=sigma,
                            filename=filename,
                            verbose=log_level)
        write_collision_eigenvalues_to_hdf5(temperatures,
                                            mesh,
                                            coleigs[i],
                                            sigma=sigma,
                                            filename=filename,
                                            verbose=log_level)
Exemplo n.º 4
0
def _write_gamma(br, interaction, i, filename=None):
    grid_points = br.get_grid_points()
    group_velocities = br.get_group_velocities()
    mode_heat_capacities = br.get_mode_heat_capacities()
    mspp = br.get_mean_square_pp_strength()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    temperatures = br.get_temperatures()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    sigmas = br.get_sigmas()

    gp = grid_points[i]
    frequencies = interaction.get_phonons()[0][gp]

    for j, sigma in enumerate(sigmas):
        if gamma_isotope is not None:
            gamma_isotope_at_sigma = gamma_isotope[j, i]
        else:
            gamma_isotope_at_sigma = None
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=group_velocities[i],
                            heat_capacity=mode_heat_capacities[i],
                            kappa=None,
                            gamma=gamma[j, :, i],
                            gamma_isotope=gamma_isotope_at_sigma,
                            mspp=mspp[i],
                            mesh_divisors=mesh_divisors,
                            grid_point=gp,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 5
0
def _write_kappa(lbte, filename=None, log_level=0):
    temperatures = lbte.get_temperatures()
    sigmas = lbte.get_sigmas()
    gamma = lbte.get_gamma()
    mesh = lbte.get_mesh_numbers()
    frequencies = lbte.get_frequencies()
    gv = lbte.get_group_velocities()
    ave_pp = lbte.get_averaged_pp_interaction()
    qpoints = lbte.get_qpoints()
    kappa = lbte.get_kappa()
    mode_kappa = lbte.get_mode_kappa()
    
    coleigs = lbte.get_collision_eigenvalues()

    for i, sigma in enumerate(sigmas):
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            kappa=kappa[i],
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            averaged_pp_interaction=ave_pp,
                            qpoint=qpoints,
                            sigma=sigma,
                            filename=filename,
                            verbose=log_level)
        write_collision_eigenvalues_to_hdf5(temperatures,
                                            mesh,
                                            coleigs[i],
                                            sigma=sigma,
                                            filename=filename,
                                            verbose=log_level)
Exemplo n.º 6
0
def _write_kappa(br, filename=None, log_level=0):
    temperatures = br.get_temperatures()
    sigmas = br.get_sigmas()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    frequencies = br.get_frequencies()
    gv = br.get_group_velocities()
    mode_cv = br.get_mode_heat_capacities()
    ave_pp = br.get_averaged_pp_interaction()
    qpoints = br.get_qpoints()
    weights = br.get_grid_weights()
    kappa = br.get_kappa()
    mode_kappa = br.get_mode_kappa()
    num_ignored_phonon_modes = br.get_number_of_ignored_phonon_modes()
    num_band = br.get_frequencies().shape[1]
    num_phonon_modes = br.get_number_of_sampling_grid_points() * num_band
    
    for i, sigma in enumerate(sigmas):
        kappa_at_sigma = kappa[i]
        if gamma_isotope is not None:
            gamma_isotope_at_sigma = gamma_isotope[i]
        else:
            gamma_isotope_at_sigma = None
        if log_level:
            print "----------- Thermal conductivity (W/m-k)",
            if sigma:
                print "for sigma=%s -----------" % sigma
            else:
                print "with tetrahedron method -----------"
            if log_level > 1:
                print ("#%6s     " + " %-9s" * 6 + "#ipm") % (
                    "T(K)", "xx", "yy", "zz", "yz", "xz", "xy")
                for j, (t, k) in enumerate(zip(temperatures, kappa_at_sigma)):
                    print ("%7.1f" + " %9.3f" * 6 + " %d/%d") % (
                        (t,) + tuple(k) + 
                        (num_ignored_phonon_modes[i, j], num_phonon_modes))
            else:
                print ("#%6s     " + " %-9s" * 6) % ("T(K)", "xx", "yy", "zz",
                                                     "yz", "xz", "xy")
                for j, (t, k) in enumerate(zip(temperatures, kappa_at_sigma)):
                    print ("%7.1f" + " %9.3f" * 6) % ((t,) + tuple(k))
            print

        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            heat_capacity=mode_cv,
                            kappa=kappa_at_sigma,
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            gamma_isotope=gamma_isotope_at_sigma,
                            averaged_pp_interaction=ave_pp,
                            qpoint=qpoints,
                            weight=weights,
                            mesh_divisors=mesh_divisors,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 7
0
def _write_gamma(br, interaction, i, filename=None):
    grid_points = br.get_grid_points()
    group_velocities = br.get_group_velocities()
    mode_heat_capacities = br.get_mode_heat_capacities()
    ave_pp = br.get_averaged_pp_interaction()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    temperatures = br.get_temperatures()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    sigmas = br.get_sigmas()
    
    gp = grid_points[i]
    frequencies = interaction.get_phonons()[0][gp]
    
    for j, sigma in enumerate(sigmas):
        if gamma_isotope is not None:
            gamma_isotope_at_sigma = gamma_isotope[j, i]
        else:
            gamma_isotope_at_sigma = None
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=group_velocities[i],
                            heat_capacity=mode_heat_capacities[:, i],
                            kappa=None,
                            gamma=gamma[j, :, i],
                            gamma_isotope=gamma_isotope_at_sigma,
                            averaged_pp_interaction=ave_pp[i],
                            mesh_divisors=mesh_divisors,
                            grid_point=gp,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 8
0
def _write_gamma(br, interaction, i, filename=None, verbose=True):
    grid_points = br.get_grid_points()
    group_velocities = br.get_group_velocities()
    mode_heat_capacities = br.get_mode_heat_capacities()
    ave_pp = br.get_averaged_pp_interaction()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    temperatures = br.get_temperatures()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    sigmas = br.get_sigmas()

    gp = grid_points[i]
    if _all_bands_exist(interaction):
        frequencies = interaction.get_phonons()[0][gp]
        for j, sigma in enumerate(sigmas):
            if gamma_isotope is not None:
                gamma_isotope_at_sigma = gamma_isotope[j, i]
            else:
                gamma_isotope_at_sigma = None
            write_kappa_to_hdf5(temperatures,
                                mesh,
                                frequency=frequencies,
                                group_velocity=group_velocities[i],
                                heat_capacity=mode_heat_capacities[:, i],
                                kappa=None,
                                gamma=gamma[j, :, i],
                                gamma_isotope=gamma_isotope_at_sigma,
                                averaged_pp_interaction=ave_pp[i],
                                mesh_divisors=mesh_divisors,
                                grid_point=gp,
                                sigma=sigma,
                                filename=filename,
                                verbose=verbose)
    else:
        for j, sigma in enumerate(sigmas):
            for k, bi in enumerate(interaction.get_band_indices()):
                frequencies = interaction.get_phonons()[0][gp, k]
                if gamma_isotope is not None:
                    gamma_isotope_at_sigma = gamma_isotope[j, i, k]
                else:
                    gamma_isotope_at_sigma = None
                    write_kappa_to_hdf5(temperatures,
                                        mesh,
                                        frequency=frequencies,
                                        group_velocity=group_velocities[i, k],
                                        heat_capacity=mode_heat_capacities[:,
                                                                           i,
                                                                           k],
                                        kappa=None,
                                        gamma=gamma[j, :, i, k],
                                        gamma_isotope=gamma_isotope_at_sigma,
                                        averaged_pp_interaction=ave_pp[i, k],
                                        mesh_divisors=mesh_divisors,
                                        grid_point=gp,
                                        band_index=bi,
                                        sigma=sigma,
                                        filename=filename,
                                        verbose=verbose)
Exemplo n.º 9
0
def _write_kappa(br, filename=None, log_level=0):
    temperatures = br.get_temperatures()
    sigmas = br.get_sigmas()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    frequencies = br.get_frequencies()
    gv = br.get_group_velocities()
    mode_cv = br.get_mode_heat_capacities()
    mspp = br.get_mean_square_pp_strength()
    qpoints = br.get_qpoints()
    weights = br.get_grid_weights()
    # num_sampling_points = br.get_number_of_sampling_points()

    kappa = br.get_kappa()
    mode_kappa = br.get_mode_kappa()

    for i, sigma in enumerate(sigmas):
        kappa_at_sigma = kappa[i]
        if gamma_isotope is not None:
            gamma_isotope_at_sigma = gamma_isotope[i]
        else:
            gamma_isotope_at_sigma = None
        if log_level:
            print "----------- Thermal conductivity (W/m-k)",
            if sigma:
                print "for sigma=%s -----------" % sigma
            else:
                print "with tetrahedron method -----------"
            print("#%6s     " + " %-9s" * 6) % ("T(K)", "xx", "yy", "zz", "yz",
                                                "xz", "xy")
            for t, k in zip(temperatures, kappa_at_sigma):
                print("%7.1f" + " %9.3f" * 6) % ((t, ) + tuple(k))
            print
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            heat_capacity=mode_cv,
                            kappa=kappa_at_sigma,
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            gamma_isotope=gamma_isotope_at_sigma,
                            mspp=mspp,
                            qpoint=qpoints,
                            weight=weights,
                            mesh_divisors=mesh_divisors,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 10
0
def _write_kappa(br, filename=None, log_level=0):
    temperatures = br.get_temperatures()
    sigmas = br.get_sigmas()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    frequencies = br.get_frequencies()
    gv = br.get_group_velocities()
    mode_cv = br.get_mode_heat_capacities()
    mspp = br.get_mean_square_pp_strength()
    qpoints = br.get_qpoints()
    weights = br.get_grid_weights()
    # num_sampling_points = br.get_number_of_sampling_points()
    
    kappa = br.get_kappa()
    mode_kappa = br.get_mode_kappa()
    
    for i, sigma in enumerate(sigmas):
        kappa_at_sigma = kappa[i]
        if gamma_isotope is not None:
            gamma_isotope_at_sigma = gamma_isotope[i]
        else:
            gamma_isotope_at_sigma = None
        if log_level:
            print "----------- Thermal conductivity (W/m-k)",
            if sigma:
                print "for sigma=%s -----------" % sigma
            else:
                print "with tetrahedron method -----------"
            print ("#%6s     " + " %-9s" * 6) % ("T(K)", "xx", "yy", "zz",
                                                "yz", "xz", "xy")
            for t, k in zip(temperatures, kappa_at_sigma):
                print ("%7.1f" + " %9.3f" * 6) % ((t,) + tuple(k))
            print
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            heat_capacity=mode_cv,
                            kappa=kappa_at_sigma,
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            gamma_isotope=gamma_isotope_at_sigma,
                            mspp=mspp,
                            qpoint=qpoints,
                            weight=weights,
                            mesh_divisors=mesh_divisors,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 11
0
 def _write_gamma(self, i, grid_point):
     for j, sigma in enumerate(self._sigmas):
         write_kappa_to_hdf5(
             self._gamma[j, i],
             self._temperatures,
             self._mesh,
             frequency=self._frequencies[i],
             group_velocity=self._gv[i],
             heat_capacity=self._cv[i],
             kappa=self._kappa[j, i],
             mesh_divisors=self._mesh_divisors,
             grid_point=grid_point,
             sigma=sigma,
             filename=self._filename)
def _write_kappa(lbte, filename=None, log_level=0):
    temperatures = lbte.get_temperatures()
    sigmas = lbte.get_sigmas()
    gamma = lbte.get_gamma()
    mesh = lbte.get_mesh_numbers()
    frequencies = lbte.get_frequencies()
    gv = lbte.get_group_velocities()
    mspp = lbte.get_mean_square_pp_strength()
    qpoints = lbte.get_qpoints()
    kappa = lbte.get_kappa()
    
    for i, sigma in enumerate(sigmas):
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            kappa=kappa[i],
                            gamma=gamma[i],
                            mspp=mspp,
                            qpoint=qpoints,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 13
0
def _write_kappa(lbte, filename=None, log_level=0):
    temperatures = lbte.get_temperatures()
    sigmas = lbte.get_sigmas()
    gamma = lbte.get_gamma()
    mesh = lbte.get_mesh_numbers()
    frequencies = lbte.get_frequencies()
    gv = lbte.get_group_velocities()
    mspp = lbte.get_mean_square_pp_strength()
    qpoints = lbte.get_qpoints()
    kappa = lbte.get_kappa()
    mode_kappa = lbte.get_mode_kappa()
    
    for i, sigma in enumerate(sigmas):
        write_kappa_to_hdf5(temperatures,
                            mesh,
                            frequency=frequencies,
                            group_velocity=gv,
                            kappa=kappa[i],
                            mode_kappa=mode_kappa[i],
                            gamma=gamma[i],
                            mspp=mspp,
                            qpoint=qpoints,
                            sigma=sigma,
                            filename=filename)
Exemplo n.º 14
0
    def get_thermal_conductivity(self,
                                 sigmas=None,
                                 temperatures=None,
                                 grid_points=None,
                                 mesh_divisors=None,
                                 coarse_mesh_shifts=None,
                                 cutoff_lifetime=1e-4,  # in second
                                 diff_kappa = 1e-5,  # relative
                                 nu=None,
                                 no_kappa_stars=False,
                                 gv_delta_q=1e-4,  # for group velocity
                                 write_gamma=False,
                                 read_gamma=False,
                                 kappa_write_step=None,
                                 filename=None):

        br = conductivity_RTA(self._interaction,
                              symmetry=self._primitive_symmetry,
                              sigmas=sigmas,
                              asigma_step= self._asigma_step,
                              temperatures=temperatures,
                              mesh_divisors=mesh_divisors,
                              coarse_mesh_shifts=coarse_mesh_shifts,
                              grid_points=grid_points,
                              cutoff_lifetime=cutoff_lifetime,
                              diff_kappa= diff_kappa,
                              nu=nu,
                              no_kappa_stars=no_kappa_stars,
                              gv_delta_q=gv_delta_q,
                              log_level=self._log_level,
                              write_tecplot = self._write_tecplot,
                              kappa_write_step=kappa_write_step,
                              is_thm=self._is_thm,
                              filename=filename)

        if read_gamma:
            for sigma in sigmas:
                self.read_gamma_at_sigma(sigma)
        br.calculate_kappa(write_gamma=write_gamma)
        mode_kappa = br.get_kappa()
        gamma = br.get_gamma()
        gamma_N=br._gamma_N
        gamma_U=br._gamma_U
        if self._log_level:
            br.print_kappa()
        if grid_points is None:
            temperatures = br.get_temperatures()
            for i, sigma in enumerate(sigmas):
                kappa = mode_kappa[i]
                write_kappa_to_hdf5(gamma[i],
                                    temperatures,
                                    br.get_mesh_numbers(),
                                    frequency=br.get_frequencies(),
                                    group_velocity=br.get_group_velocities(),
                                    heat_capacity=br.get_mode_heat_capacities(),
                                    kappa=kappa,
                                    qpoint=br.get_qpoints(),
                                    weight=br.get_grid_weights(),
                                    mesh_divisors=br.get_mesh_divisors(),
                                    sigma=sigma,
                                    filename=filename,
                                    gnu=(gamma_N[i],gamma_U[i]))
                if self._write_tecplot:
                    for j,temp in enumerate(temperatures):
                        write_kappa_to_tecplot_BZ(np.where(gamma[i,:,j]>1e-8, gamma[i,:,j],0),
                                               temp,
                                               br.get_mesh_numbers(),
                                               bz_q_address=br._bz_grid_address / br.get_mesh_numbers().astype(float),
                                               tetrahedrdons=br._unique_vertices,
                                               bz_to_pp_mapping=br._bz_to_pp_map,
                                               rec_lattice=np.linalg.inv(br._primitive.get_cell()),
                                               spg_indices_mapping=br._irr_index_mapping,
                                               spg_rotation_mapping=br._rot_mappings,
                                               frequency=br.get_frequencies(),
                                               group_velocity=br.get_group_velocities(),
                                               heat_capacity=br.get_mode_heat_capacities()[:,j],
                                               kappa=kappa[:,j],
                                               weight=br.get_grid_weights(),
                                               sigma=sigma,
                                               filename="bz")

        self._kappa = mode_kappa
        self._gamma = gamma
        self._br=br
Exemplo n.º 15
0
def _write_gamma(br, interaction, i, filename=None, verbose=True):
    grid_points = br.get_grid_points()
    group_velocities = br.get_group_velocities()
    mode_heat_capacities = br.get_mode_heat_capacities()
    ave_pp = br.get_averaged_pp_interaction()
    mesh = br.get_mesh_numbers()
    mesh_divisors = br.get_mesh_divisors()
    temperatures = br.get_temperatures()
    gamma = br.get_gamma()
    gamma_isotope = br.get_gamma_isotope()
    sigmas = br.get_sigmas()
    volume = interaction.get_primitive().get_volume()

    gp = grid_points[i]
    if _all_bands_exist(interaction):
        if ave_pp is None:
            ave_pp_i = None
        else:
            ave_pp_i = ave_pp[i]
        frequencies = interaction.get_phonons()[0][gp]
        for j, sigma in enumerate(sigmas):
            if gamma_isotope is not None:
                gamma_isotope_at_sigma = gamma_isotope[j, i]
            else:
                gamma_isotope_at_sigma = None
            write_kappa_to_hdf5(temperatures,
                                mesh,
                                frequency=frequencies,
                                group_velocity=group_velocities[i],
                                heat_capacity=mode_heat_capacities[:, i],
                                gamma=gamma[j, :, i],
                                gamma_isotope=gamma_isotope_at_sigma,
                                averaged_pp_interaction=ave_pp_i,
                                mesh_divisors=mesh_divisors,
                                grid_point=gp,
                                sigma=sigma,
                                kappa_unit_conversion=unit_to_WmK / volume,
                                filename=filename,
                                verbose=verbose)
    else:
        for j, sigma in enumerate(sigmas):
            for k, bi in enumerate(interaction.get_band_indices()):
                if ave_pp is None:
                    ave_pp_ik = None
                else:
                    ave_pp_ik = ave_pp[i, k]
                frequencies = interaction.get_phonons()[0][gp, k]
                if gamma_isotope is not None:
                    gamma_isotope_at_sigma = gamma_isotope[j, i, k]
                else:
                    gamma_isotope_at_sigma = None
                    write_kappa_to_hdf5(
                        temperatures,
                        mesh,
                        frequency=frequencies,
                        group_velocity=group_velocities[i, k],
                        heat_capacity=mode_heat_capacities[:, i, k],
                        gamma=gamma[j, :, i, k],
                        gamma_isotope=gamma_isotope_at_sigma,
                        averaged_pp_interaction=ave_pp_ik,
                        mesh_divisors=mesh_divisors,
                        grid_point=gp,
                        band_index=bi,
                        sigma=sigma,
                        kappa_unit_conversion=unit_to_WmK / volume,
                        filename=filename,
                        verbose=verbose)
Exemplo n.º 16
0
    def get_thermal_conductivity(
            self,
            sigmas=[0.1],
            t_max=1500,
            t_min=0,
            t_step=10,
            grid_points=None,
            mesh_divisors=None,
            coarse_mesh_shifts=None,
            cutoff_lifetime=1e-4,  # in second
            diff_gamma=1e-5,  # in THz
            is_nu=False,
            no_kappa_stars=False,
            gv_delta_q=1e-4,  # for group velocity
            write_gamma=False,
            read_gamma=False,
            write_amplitude=False,
            read_amplitude=False,
            filename=None):
        br = conductivity_RTA(self._interaction,
                              sigmas=sigmas,
                              asigma_step=self._adaptive_sigma_step,
                              t_max=t_max,
                              t_min=t_min,
                              t_step=t_step,
                              mesh_divisors=mesh_divisors,
                              coarse_mesh_shifts=coarse_mesh_shifts,
                              cutoff_lifetime=cutoff_lifetime,
                              diff_kappa=diff_gamma,
                              nu=is_nu,
                              no_kappa_stars=no_kappa_stars,
                              gv_delta_q=gv_delta_q,
                              log_level=self._log_level,
                              write_tecplot=self._write_tecplot,
                              filename=filename)
        br.set_grid_points(grid_points)

        if read_gamma:
            gamma = []
            for sigma in sigmas:
                try:
                    properties = read_kappa_from_hdf5(
                        br.get_mesh_numbers(),
                        mesh_divisors=br.get_mesh_divisors(),
                        sigma=sigma,
                        filename=br._filename)
                    if properties is None:
                        raise ValueError
                    tbr = br.get_temperatures()
                    ts_pos0, ts_pos1 = np.where(
                        properties['temperature'] == tbr.reshape(-1, 1))
                    br.set_temperatures(tbr[ts_pos0])
                    gamma_at_sigma = properties['gamma'][:, ts_pos1]
                    gamma.append(gamma_at_sigma)
                    br.set_gamma(np.double(gamma))
                except ValueError:
                    properties = []
                    for point in br.get_grid_points():
                        property = read_kappa_from_hdf5(
                            br.get_mesh_numbers(),
                            mesh_divisors=br.get_mesh_divisors(),
                            grid_point=point,
                            sigma=sigma,
                            filename=br._filename)
                        properties.append(property)
                    tbr = br.get_temperatures()
                    ts_pos0, ts_pos1 = np.where(
                        properties[0]['temperature'] == tbr.reshape(-1, 1))
                    br.set_temperatures(tbr[ts_pos0])
                    gamma_at_sigma = np.array(
                        [p['gamma'][ts_pos1] for p in properties],
                        dtype="double")
                    gamma.append(gamma_at_sigma)
                    br.set_gamma(np.double(gamma))
        br.calculate_kappa(write_amplitude=write_amplitude,
                           read_amplitude=read_amplitude,
                           write_gamma=write_gamma)
        mode_kappa = br.get_kappa()
        gamma = br.get_gamma()
        gamma_N = br._gamma_N
        gamma_U = br._gamma_U
        if self._log_level:
            br.print_kappa()
        if grid_points is None:
            temperatures = br.get_temperatures()
            for i, sigma in enumerate(sigmas):
                kappa = mode_kappa[i]
                write_kappa_to_hdf5(
                    gamma[i],
                    temperatures,
                    br.get_mesh_numbers(),
                    frequency=br.get_frequencies(),
                    group_velocity=br.get_group_velocities(),
                    heat_capacity=br.get_mode_heat_capacities(),
                    kappa=kappa,
                    qpoint=br.get_qpoints(),
                    weight=br.get_grid_weights(),
                    mesh_divisors=br.get_mesh_divisors(),
                    sigma=sigma,
                    filename=filename,
                    gnu=(gamma_N[i], gamma_U[i]))
                if self._write_tecplot:
                    for j, temp in enumerate(temperatures):
                        write_kappa_to_tecplot_BZ(
                            np.where(gamma[i, :, j] > 1e-8, gamma[i, :, j], 0),
                            temp,
                            br.get_mesh_numbers(),
                            bz_q_address=br._bz_grid_address /
                            br.get_mesh_numbers().astype(float),
                            tetrahedrdons=br._unique_vertices,
                            bz_to_pp_mapping=br._bz_to_pp_map,
                            rec_lattice=np.linalg.inv(
                                br._primitive.get_cell()),
                            spg_indices_mapping=br._irr_index_mapping,
                            spg_rotation_mapping=br._rot_mappings,
                            frequency=br.get_frequencies(),
                            group_velocity=br.get_group_velocities(),
                            heat_capacity=br.get_mode_heat_capacities()[:, j],
                            kappa=kappa[:, j],
                            weight=br.get_grid_weights(),
                            sigma=sigma,
                            filename="bz")

        self._kappa = mode_kappa
        self._gamma = gamma
        self._br = br
Exemplo n.º 17
0
    def get_kappa_ite_cg(
            self,
            sigmas=[0.2],
            temperatures=None,
            grid_points=None,
            max_ite=None,
            no_kappa_stars=False,
            diff_kappa=1e-5,  # relative value
            write_gamma=False,
            read_gamma=False,
            read_col=False,
            write_col=False,
            filename="ite_cg"):
        bis = conductivity_ITE_CG(
            self._interaction,  #Iterative Boltzmann solutions
            symmetry=self._primitive_symmetry,
            sigmas=sigmas,
            grid_points=grid_points,
            temperatures=temperatures,
            max_ite=max_ite,
            adaptive_sigma_step=self._asigma_step,
            no_kappa_stars=no_kappa_stars,
            diff_kappa=diff_kappa,
            mass_variances=self._mass_variances,
            length=self._length,
            log_level=self._log_level,
            read_gamma=read_gamma,
            write_gamma=write_gamma,
            read_col=read_col,
            write_col=write_col,
            is_thm=self._is_thm,
            filename=filename)

        for s, sigma in enumerate(sigmas):
            write_kappa_to_hdf5(bis._gamma[s],
                                bis._temperatures,
                                bis._mesh,
                                frequency=bis._frequencies,
                                group_velocity=bis._gv,
                                heat_capacity=bis.get_mode_heat_capacities(),
                                kappa=bis._kappa[s],
                                qpoint=bis._qpoints,
                                weight=bis._grid_weights,
                                sigma=sigma,
                                filename="smrt")

        try:
            for bi in bis:
                bi.set_kappa()
                print "After %d iteration(s), the thermal conductivities are recalculated to be (W/mK)" % bi._ite_step
                bi.print_kappa()
        except KeyboardInterrupt:
            print
            print "A keyboard Interruption is captured. The iterations are terminated!"
            print "The kappa is retrieved from the last iterations."
            bis._F = bis._F_prev
        print "Final thermal conductivity (W/mK)"
        for s, sigma in enumerate(sigmas):
            bis.set_equivalent_gamma_at_sigma(s)
            bis.set_kappa_at_sigma(s)
            write_kappa_to_hdf5(bis._gamma[s],
                                bis._temperatures,
                                bis._mesh,
                                frequency=bis._frequencies,
                                group_velocity=bis._gv,
                                heat_capacity=bis.get_mode_heat_capacities(),
                                kappa=bis._kappa[s],
                                qpoint=bis._qpoints,
                                weight=bis._grid_weights,
                                sigma=sigma,
                                filename=bis._filename)
        self._gamma = bis._gamma
        self._kappa = bis._kappa
        bis.print_kappa()
Exemplo n.º 18
0
    def get_thermal_conductivity(
            self,
            sigmas=None,
            temperatures=None,
            grid_points=None,
            mesh_divisors=None,
            coarse_mesh_shifts=None,
            cutoff_lifetime=1e-4,  # in second
            diff_kappa=1e-5,  # relative
            nu=None,
            no_kappa_stars=False,
            gv_delta_q=1e-4,  # for group velocity
            write_gamma=False,
            read_gamma=False,
            kappa_write_step=None,
            filename=None):

        br = conductivity_RTA(self._interaction,
                              symmetry=self._primitive_symmetry,
                              sigmas=sigmas,
                              asigma_step=self._asigma_step,
                              temperatures=temperatures,
                              mesh_divisors=mesh_divisors,
                              coarse_mesh_shifts=coarse_mesh_shifts,
                              grid_points=grid_points,
                              cutoff_lifetime=cutoff_lifetime,
                              diff_kappa=diff_kappa,
                              nu=nu,
                              no_kappa_stars=no_kappa_stars,
                              gv_delta_q=gv_delta_q,
                              log_level=self._log_level,
                              write_tecplot=self._write_tecplot,
                              kappa_write_step=kappa_write_step,
                              is_thm=self._is_thm,
                              filename=filename)

        if read_gamma:
            for sigma in sigmas:
                self.read_gamma_at_sigma(sigma)
        br.calculate_kappa(write_gamma=write_gamma)
        mode_kappa = br.get_kappa()
        gamma = br.get_gamma()
        gamma_N = br._gamma_N
        gamma_U = br._gamma_U
        if self._log_level:
            br.print_kappa()
        if grid_points is None:
            temperatures = br.get_temperatures()
            for i, sigma in enumerate(sigmas):
                kappa = mode_kappa[i]
                write_kappa_to_hdf5(
                    gamma[i],
                    temperatures,
                    br.get_mesh_numbers(),
                    frequency=br.get_frequencies(),
                    group_velocity=br.get_group_velocities(),
                    heat_capacity=br.get_mode_heat_capacities(),
                    kappa=kappa,
                    qpoint=br.get_qpoints(),
                    weight=br.get_grid_weights(),
                    mesh_divisors=br.get_mesh_divisors(),
                    sigma=sigma,
                    filename=filename,
                    gnu=(gamma_N[i], gamma_U[i]))
                if self._write_tecplot:
                    for j, temp in enumerate(temperatures):
                        write_kappa_to_tecplot_BZ(
                            np.where(gamma[i, :, j] > 1e-8, gamma[i, :, j], 0),
                            temp,
                            br.get_mesh_numbers(),
                            bz_q_address=br._bz_grid_address /
                            br.get_mesh_numbers().astype(float),
                            tetrahedrdons=br._unique_vertices,
                            bz_to_pp_mapping=br._bz_to_pp_map,
                            rec_lattice=np.linalg.inv(
                                br._primitive.get_cell()),
                            spg_indices_mapping=br._irr_index_mapping,
                            spg_rotation_mapping=br._rot_mappings,
                            frequency=br.get_frequencies(),
                            group_velocity=br.get_group_velocities(),
                            heat_capacity=br.get_mode_heat_capacities()[:, j],
                            kappa=kappa[:, j],
                            weight=br.get_grid_weights(),
                            sigma=sigma,
                            filename="bz")

        self._kappa = mode_kappa
        self._gamma = gamma
        self._br = br
Exemplo n.º 19
0
    def get_thermal_conductivity(self,
                                 sigmas=[0.1],
                                 t_max=1500,
                                 t_min=0,
                                 t_step=10,
                                 grid_points=None,
                                 mesh_divisors=None,
                                 coarse_mesh_shifts=None,
                                 cutoff_lifetime=1e-4, # in second
                                 diff_gamma = 1e-5, # in THz
                                 is_nu=False,
                                 no_kappa_stars=False,
                                 gv_delta_q=1e-4, # for group velocity
                                 write_gamma=False,
                                 read_gamma=False,
                                 write_amplitude=False,
                                 read_amplitude=False,
                                 filename=None):
        br = conductivity_RTA(self._interaction,
                              sigmas=sigmas,
                              asigma_step= self._adaptive_sigma_step,
                              t_max=t_max,
                              t_min=t_min,
                              t_step=t_step,
                              mesh_divisors=mesh_divisors,
                              coarse_mesh_shifts=coarse_mesh_shifts,
                              cutoff_lifetime=cutoff_lifetime,
                              diff_kappa= diff_gamma,
                              nu=is_nu,
                              no_kappa_stars=no_kappa_stars,
                              gv_delta_q=gv_delta_q,
                              log_level=self._log_level,
                              write_tecplot = self._write_tecplot,
                              filename=filename)
        br.set_grid_points(grid_points)

        if read_gamma:
            gamma = []
            for sigma in sigmas:
                try:
                    properties = read_kappa_from_hdf5(
                        br.get_mesh_numbers(),
                        mesh_divisors=br.get_mesh_divisors(),
                        sigma=sigma,
                        filename=br._filename)
                    if properties is None:
                        raise ValueError
                    tbr =  br.get_temperatures()
                    ts_pos0, ts_pos1 = np.where(properties['temperature'] == tbr.reshape(-1,1))
                    br.set_temperatures(tbr[ts_pos0])
                    gamma_at_sigma=properties['gamma'][:,ts_pos1]
                    gamma.append(gamma_at_sigma)
                    br.set_gamma(np.double(gamma))
                except ValueError:
                    properties = []
                    for point in br.get_grid_points():
                        property = read_kappa_from_hdf5(
                            br.get_mesh_numbers(),
                            mesh_divisors=br.get_mesh_divisors(),
                            grid_point=point,
                            sigma=sigma,
                            filename=br._filename)
                        properties.append(property)
                    tbr =  br.get_temperatures()
                    ts_pos0,ts_pos1 = np.where(properties[0]['temperature'] == tbr.reshape(-1,1))
                    br.set_temperatures(tbr[ts_pos0])
                    gamma_at_sigma = np.array([p['gamma'][ts_pos1] for p in properties], dtype="double")
                    gamma.append(gamma_at_sigma)
                    br.set_gamma(np.double(gamma))
        br.calculate_kappa(write_amplitude=write_amplitude,
                           read_amplitude=read_amplitude,
                           write_gamma=write_gamma)
        mode_kappa = br.get_kappa()
        gamma = br.get_gamma()
        gamma_N=br._gamma_N
        gamma_U=br._gamma_U
        if self._log_level:
            br.print_kappa()
        if grid_points is None:
            temperatures = br.get_temperatures()
            for i, sigma in enumerate(sigmas):
                kappa = mode_kappa[i]
                write_kappa_to_hdf5(gamma[i],
                                    temperatures,
                                    br.get_mesh_numbers(),
                                    frequency=br.get_frequencies(),
                                    group_velocity=br.get_group_velocities(),
                                    heat_capacity=br.get_mode_heat_capacities(),
                                    kappa=kappa,
                                    qpoint=br.get_qpoints(),
                                    weight=br.get_grid_weights(),
                                    mesh_divisors=br.get_mesh_divisors(),
                                    sigma=sigma,
                                    filename=filename,
                                    gnu=(gamma_N[i],gamma_U[i]))
                if self._write_tecplot:
                    for j,temp in enumerate(temperatures):
                        write_kappa_to_tecplot_BZ(np.where(gamma[i,:,j]>1e-8, gamma[i,:,j],0),
                                               temp,
                                               br.get_mesh_numbers(),
                                               bz_q_address=br._bz_grid_address / br.get_mesh_numbers().astype(float),
                                               tetrahedrdons=br._unique_vertices,
                                               bz_to_pp_mapping=br._bz_to_pp_map,
                                               rec_lattice=np.linalg.inv(br._primitive.get_cell()),
                                               spg_indices_mapping=br._irr_index_mapping,
                                               spg_rotation_mapping=br._rot_mappings,
                                               frequency=br.get_frequencies(),
                                               group_velocity=br.get_group_velocities(),
                                               heat_capacity=br.get_mode_heat_capacities()[:,j],
                                               kappa=kappa[:,j],
                                               weight=br.get_grid_weights(),
                                               sigma=sigma,
                                               filename="bz")

        self._kappa = mode_kappa
        self._gamma = gamma
        self._br=br
Exemplo n.º 20
0
    def get_kappa_ite_cg(self,
                          sigmas=[0.2],
                          temperatures=None,
                          grid_points=None,
                          max_ite = None,
                          no_kappa_stars=False,
                          diff_kappa = 1e-5, # relative value
                          write_gamma=False,
                          read_gamma=False,
                          read_col=False,
                          write_col=False,
                          filename="ite_cg"):
        bis=conductivity_ITE_CG(self._interaction, #Iterative Boltzmann solutions
                            symmetry=self._primitive_symmetry,
                            sigmas=sigmas,
                            grid_points = grid_points,
                            temperatures=temperatures,
                            max_ite = max_ite,
                            adaptive_sigma_step = self._asigma_step,
                            no_kappa_stars=no_kappa_stars,
                            diff_kappa= diff_kappa,
                            mass_variances=self._mass_variances,
                            length=self._length,
                            log_level=self._log_level,
                            read_gamma = read_gamma,
                            write_gamma = write_gamma,
                            read_col = read_col,
                            write_col=write_col,
                            is_thm=self._is_thm,
                            filename=filename)

        for s, sigma in enumerate(sigmas):
            write_kappa_to_hdf5(bis._gamma[s],
                        bis._temperatures,
                        bis._mesh,
                        frequency=bis._frequencies,
                        group_velocity=bis._gv,
                        heat_capacity=bis.get_mode_heat_capacities(),
                        kappa=bis._kappa[s],
                        qpoint=bis._qpoints,
                        weight=bis._grid_weights,
                        sigma=sigma,
                        filename="smrt")

        try:
            for bi in bis:
                bi.set_kappa()
                print "After %d iteration(s), the thermal conductivities are recalculated to be (W/mK)"%bi._ite_step
                bi.print_kappa()
        except KeyboardInterrupt:
            print
            print "A keyboard Interruption is captured. The iterations are terminated!"
            print "The kappa is retrieved from the last iterations."
            bis._F = bis._F_prev
        print "Final thermal conductivity (W/mK)"
        for s, sigma in enumerate(sigmas):
            bis.set_equivalent_gamma_at_sigma(s)
            bis.set_kappa_at_sigma(s)
            write_kappa_to_hdf5(bis._gamma[s],
                                bis._temperatures,
                                bis._mesh,
                                frequency=bis._frequencies,
                                group_velocity=bis._gv,
                                heat_capacity=bis.get_mode_heat_capacities(),
                                kappa=bis._kappa[s],
                                qpoint=bis._qpoints,
                                weight=bis._grid_weights,
                                sigma=sigma,
                                filename=bis._filename)
        self._gamma=bis._gamma
        self._kappa=bis._kappa
        bis.print_kappa()