def _calculate_kappados(ph3: Phono3py, mode_prop, freq_points=None): tc = ph3.thermal_conductivity bz_grid = ph3.grid frequencies, _, _ = ph3.get_phonon_data() kappados = KappaDOS(mode_prop, frequencies, bz_grid, tc.grid_points, frequency_points=freq_points) freq_points, kdos = kappados.get_kdos() ir_grid_points, _, ir_grid_map = get_ir_grid_points(bz_grid) kappados = KappaDOS( mode_prop, tc.frequencies, bz_grid, tc.grid_points, ir_grid_map=ir_grid_map, frequency_points=freq_points, ) ir_freq_points, ir_kdos = kappados.get_kdos() np.testing.assert_equal(bz_grid.bzg2grg[tc.grid_points], ir_grid_points) np.testing.assert_allclose(ir_freq_points, freq_points, rtol=0, atol=1e-5) np.testing.assert_allclose(ir_kdos, kdos, rtol=0, atol=1e-5) return freq_points, kdos[0, :, :, 0]
def init_phph_interaction( phono3py: Phono3py, settings, updated_settings, input_filename, output_filename, log_level, ): """Initialize ph-ph interaction and phonons on grid.""" if log_level: print("Generating grid system ... ", end="", flush=True) phono3py.mesh_numbers = settings.mesh_numbers bz_grid = phono3py.grid if log_level: if bz_grid.grid_matrix is None: print("[ %d %d %d ]" % tuple(phono3py.mesh_numbers)) else: print("") print("Generalized regular grid: [ %d %d %d ]" % tuple(bz_grid.D_diag)) print("Grid generation matrix:") print(" [ %d %d %d ]" % tuple(bz_grid.grid_matrix[0])) print(" [ %d %d %d ]" % tuple(bz_grid.grid_matrix[1])) print(" [ %d %d %d ]" % tuple(bz_grid.grid_matrix[2])) if settings.is_symmetrize_fc3_q: print("Permutation symmetry of ph-ph interaction strengths: True") ave_pp = settings.constant_averaged_pp_interaction phono3py.init_phph_interaction( nac_q_direction=settings.nac_q_direction, constant_averaged_interaction=ave_pp, frequency_scale_factor=updated_settings["frequency_scale_factor"], symmetrize_fc3q=settings.is_symmetrize_fc3_q, lapack_zheev_uplo=settings.lapack_zheev_uplo, ) if not settings.read_phonon: if log_level: print("-" * 27 + " Phonon calculations " + "-" * 28) dm = phono3py.dynamical_matrix if dm.is_nac() and dm.nac_method == "gonze": dm.show_nac_message() print("Running harmonic phonon calculations...") sys.stdout.flush() phono3py.run_phonon_solver() if settings.write_phonon: freqs, eigvecs, grid_address = phono3py.get_phonon_data() ir_grid_points, ir_grid_weights, _ = get_ir_grid_points(bz_grid) ir_grid_points = np.array(bz_grid.grg2bzg[ir_grid_points], dtype="int_") filename = write_phonon_to_hdf5( freqs, eigvecs, grid_address, phono3py.mesh_numbers, bz_grid=bz_grid, ir_grid_points=ir_grid_points, ir_grid_weights=ir_grid_weights, compression=settings.hdf5_compression, filename=output_filename, ) if filename: if log_level: print('Phonons are written into "%s".' % filename) else: print("Writing phonons failed.") if log_level: print_error() sys.exit(1) if settings.read_phonon: phonons = read_phonon_from_hdf5(phono3py.mesh_numbers, filename=input_filename, verbose=(log_level > 0)) if phonons is None: print("Reading phonons failed.") if log_level: print_error() sys.exit(1) try: phono3py.set_phonon_data(*phonons) except RuntimeError: if log_level: print_error() sys.exit(1)