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)
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)
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