Example #1
0
def _write_gamma_detail(br,
                        interaction,
                        i,
                        compression=None,
                        filename=None,
                        verbose=True):
    gamma_detail = br.get_gamma_detail_at_q()
    temperatures = br.get_temperatures()
    mesh = br.get_mesh_numbers()
    grid_points = br.get_grid_points()
    gp = grid_points[i]
    sigmas = br.get_sigmas()
    sigma_cutoff = br.get_sigma_cutoff_width()
    triplets, weights, map_triplets, _ = interaction.get_triplets_at_q()
    grid_address = interaction.get_grid_address()
    bz_map = interaction.get_bz_map()
    if map_triplets is None:
        all_triplets = None
    else:
        all_triplets = get_all_triplets(gp, grid_address, bz_map, mesh)

    if all_bands_exist(interaction):
        for j, sigma in enumerate(sigmas):
            write_gamma_detail_to_hdf5(temperatures,
                                       mesh,
                                       gamma_detail=gamma_detail,
                                       grid_point=gp,
                                       triplet=triplets,
                                       weight=weights,
                                       triplet_map=map_triplets,
                                       triplet_all=all_triplets,
                                       sigma=sigma,
                                       sigma_cutoff=sigma_cutoff,
                                       compression=compression,
                                       filename=filename,
                                       verbose=verbose)
    else:
        for j, sigma in enumerate(sigmas):
            for k, bi in enumerate(interaction.get_band_indices()):
                write_gamma_detail_to_hdf5(temperatures,
                                           mesh,
                                           gamma_detail=gamma_detail[:, :,
                                                                     k, :, :],
                                           grid_point=gp,
                                           triplet=triplets,
                                           weight=weights,
                                           band_index=bi,
                                           sigma=sigma,
                                           sigma_cutoff=sigma_cutoff,
                                           compression=compression,
                                           filename=filename,
                                           verbose=verbose)
Example #2
0
def _write_gamma(br, interaction, i, filename=None, verbose=True):
    grid_points = br.get_grid_points()
    group_velocities = br.get_group_velocities()
    gv_by_gv = br.get_gv_by_gv()
    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()
    sigma_cutoff = br.get_sigma_cutoff_width()
    volume = interaction.get_primitive().get_volume()
    gamma_N, gamma_U = br.get_gamma_N_U()

    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
            if gamma_N is None:
                gamma_N_at_sigma = None
            else:
                gamma_N_at_sigma = gamma_N[j, :, i]
            if gamma_U is None:
                gamma_U_at_sigma = None
            else:
                gamma_U_at_sigma = gamma_U[j, :, i]

            write_kappa_to_hdf5(temperatures,
                                mesh,
                                frequency=frequencies,
                                group_velocity=group_velocities[i],
                                gv_by_gv=gv_by_gv[i],
                                heat_capacity=mode_heat_capacities[:, i],
                                gamma=gamma[j, :, i],
                                gamma_isotope=gamma_isotope_at_sigma,
                                gamma_N=gamma_N_at_sigma,
                                gamma_U=gamma_U_at_sigma,
                                averaged_pp_interaction=ave_pp_i,
                                mesh_divisors=mesh_divisors,
                                grid_point=gp,
                                sigma=sigma,
                                sigma_cutoff=sigma_cutoff,
                                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, bi]
                if gamma_isotope is not None:
                    gamma_isotope_at_sigma = gamma_isotope[j, i, k]
                else:
                    gamma_isotope_at_sigma = None
                if gamma_N is None:
                    gamma_N_at_sigma = None
                else:
                    gamma_N_at_sigma = gamma_N[j, :, i, k]
                if gamma_U is None:
                    gamma_U_at_sigma = None
                else:
                    gamma_U_at_sigma = gamma_U[j, :, i, k]
                write_kappa_to_hdf5(temperatures,
                                    mesh,
                                    frequency=frequencies,
                                    group_velocity=group_velocities[i, k],
                                    gv_by_gv=gv_by_gv[i, k],
                                    heat_capacity=mode_heat_capacities[:, i,
                                                                       k],
                                    gamma=gamma[j, :, i, k],
                                    gamma_isotope=gamma_isotope_at_sigma,
                                    gamma_N=gamma_N_at_sigma,
                                    gamma_U=gamma_U_at_sigma,
                                    averaged_pp_interaction=ave_pp_ik,
                                    mesh_divisors=mesh_divisors,
                                    grid_point=gp,
                                    band_index=bi,
                                    sigma=sigma,
                                    sigma_cutoff=sigma_cutoff,
                                    kappa_unit_conversion=unit_to_WmK / volume,
                                    filename=filename,
                                    verbose=verbose)
Example #3
0
def get_thermal_conductivity_RTA(
        interaction,
        symmetry,
        temperatures=np.arange(0, 1001, 10, dtype='double'),
        sigmas=None,
        sigma_cutoff=None,
        mass_variances=None,
        grid_points=None,
        is_isotope=False,
        boundary_mfp=None,  # in micrometre
        use_ave_pp=False,
        gamma_unit_conversion=None,
        mesh_divisors=None,
        coarse_mesh_shifts=None,
        is_kappa_star=True,
        gv_delta_q=1e-4,
        is_full_pp=False,
        write_gamma=False,
        read_gamma=False,
        is_N_U=False,
        write_kappa=False,
        write_pp=False,
        read_pp=False,
        write_gamma_detail=False,
        input_filename=None,
        output_filename=None,
        log_level=0):

    if log_level:
        print("-------------------- Lattice thermal conducitivity (RTA) "
              "--------------------")
    br = Conductivity_RTA(interaction,
                          symmetry,
                          grid_points=grid_points,
                          temperatures=temperatures,
                          sigmas=sigmas,
                          sigma_cutoff=sigma_cutoff,
                          is_isotope=is_isotope,
                          mass_variances=mass_variances,
                          boundary_mfp=boundary_mfp,
                          use_ave_pp=use_ave_pp,
                          gamma_unit_conversion=gamma_unit_conversion,
                          mesh_divisors=mesh_divisors,
                          coarse_mesh_shifts=coarse_mesh_shifts,
                          is_kappa_star=is_kappa_star,
                          gv_delta_q=gv_delta_q,
                          is_full_pp=is_full_pp,
                          read_pp=read_pp,
                          store_pp=write_pp,
                          pp_filename=input_filename,
                          is_N_U=is_N_U,
                          is_gamma_detail=write_gamma_detail,
                          log_level=log_level)

    if read_gamma:
        if not _set_gamma_from_file(br, filename=input_filename):
            print("Reading collisions failed.")
            return False

    for i in br:
        if write_pp:
            _write_pp(br, interaction, i, filename=output_filename)
        if write_gamma:
            _write_gamma(br,
                         interaction,
                         i,
                         filename=output_filename,
                         verbose=log_level)
        if write_gamma_detail:
            _write_gamma_detail(br,
                                interaction,
                                i,
                                filename=output_filename,
                                verbose=log_level)

    if write_kappa:
        if grid_points is None and all_bands_exist(interaction):
            br.set_kappa_at_sigmas()
            _write_kappa(br,
                         interaction.get_primitive().get_volume(),
                         filename=output_filename,
                         log_level=log_level)

    return br