Fix ave_pp write out problem and add kappa_conversion_factor to kappa-xxx.hdf5

This commit is contained in:
Atsushi Togo 2016-04-21 23:53:35 +09:00
parent 68fbd2b5c8
commit 893ec5470d
2 changed files with 41 additions and 25 deletions

View File

@ -637,6 +637,7 @@ def write_kappa_to_hdf5(temperature,
grid_point=None,
band_index=None,
sigma=None,
kappa_unit_conversion=None,
filename=None,
verbose=True):
if band_index is None:
@ -671,6 +672,9 @@ def write_kappa_to_hdf5(temperature,
w.create_dataset('qpoint', data=qpoint)
if weight is not None:
w.create_dataset('weight', data=weight)
if kappa_unit_conversion is not None:
w.create_dataset('kappa_unit_conversion',
data=kappa_unit_conversion)
if verbose:
text = ""

View File

@ -4,7 +4,7 @@ from phonopy.units import THzToEv, THz, Angstrom
from phonopy.phonon.thermal_properties import mode_cv as get_mode_cv
from anharmonic.file_IO import (write_kappa_to_hdf5, write_triplets,
read_gamma_from_hdf5, write_grid_address)
from anharmonic.phonon3.conductivity import Conductivity
from anharmonic.phonon3.conductivity import Conductivity, unit_to_WmK
from anharmonic.phonon3.imag_self_energy import ImagSelfEnergy
from anharmonic.phonon3.triplets import get_grid_points_by_rotations
@ -72,7 +72,10 @@ def get_thermal_conductivity_RTA(
if write_kappa:
if (grid_points is None and _all_bands_exist(interaction)):
br.set_kappa_at_sigmas()
_write_kappa(br, filename=output_filename, log_level=log_level)
_write_kappa(br,
interaction,
filename=output_filename,
log_level=log_level)
return br
@ -87,9 +90,14 @@ def _write_gamma(br, interaction, i, filename=None, verbose=True):
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:
@ -101,18 +109,22 @@ def _write_gamma(br, interaction, i, filename=None, verbose=True):
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],
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]
@ -124,19 +136,17 @@ def _write_gamma(br, interaction, i, filename=None, verbose=True):
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],
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)
def _all_bands_exist(interaction):
band_indices = interaction.get_band_indices()
num_band = interaction.get_primitive().get_number_of_atoms() * 3
@ -157,7 +167,7 @@ def _write_triplets(interaction, filename=None):
filename=filename)
write_grid_address(grid_address, mesh, filename=filename)
def _write_kappa(br, filename=None, log_level=0):
def _write_kappa(br, interaction, filename=None, log_level=0):
temperatures = br.get_temperatures()
sigmas = br.get_sigmas()
gamma = br.get_gamma()
@ -175,6 +185,7 @@ def _write_kappa(br, filename=None, log_level=0):
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
volume = interaction.get_primitive().get_volume()
for i, sigma in enumerate(sigmas):
kappa_at_sigma = kappa[i]
@ -217,6 +228,7 @@ def _write_kappa(br, filename=None, log_level=0):
weight=weights,
mesh_divisors=mesh_divisors,
sigma=sigma,
kappa_unit_conversion=unit_to_WmK / volume,
filename=filename,
verbose=log_level)