def __init__(self, filename=None, args=None): self._settings = Phono3pySettings() if filename is not None: ConfParser.__init__(self, filename=filename) self.parse_conf() # self.parameters[key] = val self._parse_conf() self._set_settings() if args is not None: ConfParser.__init__(self, args=args) self.read_options() # store data in self._confs self._read_options() self.parse_conf() # self.parameters[key] = val self._parse_conf() self._set_settings()
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Supercell size for fc2 if params.has_key('dim_extra'): self._settings.set_supercell_matrix_extra(params['dim_extra']) # Sets of band indices that are summed if params.has_key('band_indices'): self._settings.set_band_indices(params['band_indices']) if params.has_key('mesh_shift'): self._settings.set_mesh_shift(params['mesh_shift']) # Grid points if params.has_key('grid_points'): self._settings.set_grid_points(params['grid_points']) # Calculate thermal conductivity in BTE-RTA if params.has_key('is_bterta'): self._settings.set_is_bterta(params['is_bterta']) # Calculate linewidths if params.has_key('is_linewidth'): self._settings.set_is_linewidth(params['is_linewidth']) # Tell Normal and Umklapp process apart if params.has_key("read_fc2"): self._settings.set_read_fc2(params['read_fc2']) if params.has_key("read_fc2_extra"): self._settings.set_read_fc2_extra(params['read_fc2_extra']) # Read gammas from hdf5 if params.has_key('read_gamma'): self._settings.set_read_gamma(params['read_gamma']) # Sum partial kappa at q-stars if params.has_key('no_kappa_stars'): self._settings.set_no_kappa_stars(params['no_kappa_stars']) # Temperatures if params.has_key('temperature'): self._settings.set_temperature(params['temperature']) # Write gamma to hdf5 if params.has_key('write_gamma'): self._settings.set_write_gamma(params['write_gamma'])
def __init__(self, filename=None, args=None, default_settings=None): self._settings = Phono3pySettings(default=default_settings) confs = {} if filename is not None: ConfParser.__init__(self, filename=filename) self.read_file() # store .conf file setting in self._confs self._parse_conf() self._set_settings() confs.update(self._confs) if args is not None: ConfParser.__init__(self, args=args) self._read_options() self._parse_conf() self._set_settings() confs.update(self._confs) self._confs = confs
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Supercell dimension for fc2 if params.has_key('dim_fc2'): self._settings.set_phonon_supercell_matrix(params['dim_fc2']) # Boundary mean free path for thermal conductivity calculation if params.has_key('boundary_mfp'): self._settings.set_boundary_mfp(params['boundary_mfp']) # Peierls type approximation for squared ph-ph interaction strength if params.has_key('constant_averaged_pp_interaction'): self._settings.set_constant_averaged_pp_interaction( params['constant_averaged_pp_interaction']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if params.has_key('cutoff_fc3_distance'): self._settings.set_cutoff_fc3_distance( params['cutoff_fc3_distance']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if params.has_key('cutoff_pair_distance'): self._settings.set_cutoff_pair_distance( params['cutoff_pair_distance']) # Grid addresses (sets of three integer values) if params.has_key('grid_addresses'): self._settings.set_grid_addresses(params['grid_addresses']) # Grid points if params.has_key('grid_points'): self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if params.has_key('ion_clamped'): self._settings.set_ion_clamped(params['ion_clamped']) # Calculate thermal conductivity in BTE-RTA if params.has_key('is_bterta'): self._settings.set_is_bterta(params['is_bterta']) # Calculate imaginary part of self energy if params.has_key('is_imag_self_energy'): self._settings.set_is_imag_self_energy( params['is_imag_self_energy']) # Calculate lifetime due to isotope scattering if params.has_key('is_isotope'): self._settings.set_is_isotope(params['is_isotope']) # Calculate thermal conductivity in LBTE with Chaput's method if params.has_key('is_lbte'): self._settings.set_is_lbte(params['is_lbte']) # Calculate linewidths if params.has_key('is_linewidth'): self._settings.set_is_linewidth(params['is_linewidth']) # Calculate frequency_shifts if params.has_key('is_frequency_shift'): self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Mass variance parameters if params.has_key('mass_variances'): self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if params.has_key('max_freepath'): self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if params.has_key('mesh_divisors'): self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Cutoff frequency for pseudo inversion of collision matrix if params.has_key('pinv_cutoff'): self._settings.set_pinv_cutoff(params['pinv_cutoff']) # Read phonon-phonon interaction amplitudes from hdf5 if params.has_key('read_amplitude'): self._settings.set_read_amplitude(params['read_amplitude']) # Read collision matrix and gammas from hdf5 if params.has_key('read_collision'): self._settings.set_read_collision(params['read_collision']) # Read gammas from hdf5 if params.has_key('read_gamma'): self._settings.set_read_gamma(params['read_gamma']) # Calculate imag-part self energy with integration weights from gaussian # smearing function if params.has_key('run_with_g'): self._settings.set_run_with_g(params['run_with_g']) # Sum partial kappa at q-stars if params.has_key('no_kappa_stars'): self._settings.set_no_kappa_stars(params['no_kappa_stars']) # Scattering event class 1 or 2 if params.has_key('scattering_event_class'): self._settings.set_scattering_event_class( params['scattering_event_class']) # Temperatures if params.has_key('temperatures'): self._settings.set_temperatures(params['temperatures']) # Use averaged ph-ph interaction if params.has_key('average_pp_interaction'): self._settings.set_average_pp_interaction( params['average_pp_interaction']) # Write phonon-phonon interaction amplitudes to hdf5 if params.has_key('write_amplitude'): self._settings.set_write_amplitude(params['write_amplitude']) # Write detailed imag-part of self energy to hdf5 if params.has_key('write_detailed_gamma'): self._settings.set_write_detailed_gamma( params['write_detailed_gamma']) # Write imag-part of self energy to hdf5 if params.has_key('write_gamma'): self._settings.set_write_gamma(params['write_gamma']) # Write collision matrix and gammas to hdf5 if params.has_key('write_collision'): self._settings.set_write_collision(params['write_collision'])
def __init__(self, filename=None, options=None, option_list=None): ConfParser.__init__(self, filename, options, option_list) self._read_options() self._parse_conf() self._settings = Phono3pySettings() self._set_settings()
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Is getting least displacements? if 'create_displacements' in params: if params['create_displacements']: self._settings.set_create_displacements('displacements') # Supercell dimension for fc2 if 'dim_fc2' in params: self._settings.set_phonon_supercell_matrix(params['dim_fc2']) # Boundary mean free path for thermal conductivity calculation if 'boundary_mfp' in params: self._settings.set_boundary_mfp(params['boundary_mfp']) # Peierls type approximation for squared ph-ph interaction strength if 'constant_averaged_pp_interaction' in params: self._settings.set_constant_averaged_pp_interaction( params['constant_averaged_pp_interaction']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if 'cutoff_fc3_distance' in params: self._settings.set_cutoff_fc3_distance( params['cutoff_fc3_distance']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if 'cutoff_pair_distance' in params: self._settings.set_cutoff_pair_distance( params['cutoff_pair_distance']) # This scale factor is multiplied to frequencies only, i.e., changes # frequencies but assumed not to change the physical unit if 'frequency_scale_factor' in params: self._settings.set_frequency_scale_factor( params['frequency_scale_factor']) # Gamma unit conversion factor if 'gamma_conversion_factor' in params: self._settings.set_gamma_conversion_factor( params['gamma_conversion_factor']) # Grid addresses (sets of three integer values) if 'grid_addresses' in params: self._settings.set_grid_addresses(params['grid_addresses']) # Grid points if 'grid_points' in params: self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if 'ion_clamped' in params: self._settings.set_ion_clamped(params['ion_clamped']) # Calculate thermal conductivity in BTE-RTA if 'is_bterta' in params: self._settings.set_is_bterta(params['is_bterta']) # Calculate frequency_shifts if 'is_frequency_shift' in params: self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Calculate full ph-ph interaction strength for RTA conductivity if 'is_full_pp' in params: self._settings.set_is_full_pp(params['is_full_pp']) # Calculate phonon-Gruneisen parameters if 'is_gruneisen' in params: self._settings.set_is_gruneisen(params['is_gruneisen']) # Calculate imaginary part of self energy if 'is_imag_self_energy' in params: self._settings.set_is_imag_self_energy( params['is_imag_self_energy']) # Calculate lifetime due to isotope scattering if 'is_isotope' in params: self._settings.set_is_isotope(params['is_isotope']) # Calculate joint-DOS if 'is_joint_dos' in params: self._settings.set_is_joint_dos(params['is_joint_dos']) # Calculate thermal conductivity in LBTE with Chaput's method if 'is_lbte' in params: self._settings.set_is_lbte(params['is_lbte']) # Calculate linewidths if 'is_linewidth' in params: self._settings.set_is_linewidth(params['is_linewidth']) # Solve reducible collision matrix but not reduced matrix if 'is_reducible_collision_matrix' in params: self._settings.set_is_reducible_collision_matrix( params['is_reducible_collision_matrix']) # Symmetrize fc2 by index exchange if 'is_symmetrize_fc2' in params: self._settings.set_is_symmetrize_fc2(params['is_symmetrize_fc2']) # Symmetrize phonon fc3 by index exchange if 'is_symmetrize_fc3_q' in params: self._settings.set_is_symmetrize_fc3_q( params['is_symmetrize_fc3_q']) # Symmetrize fc3 by index exchange if 'is_symmetrize_fc3_r' in params: self._settings.set_is_symmetrize_fc3_r( params['is_symmetrize_fc3_r']) # Mass variance parameters if 'mass_variances' in params: self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if 'max_freepath' in params: self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if 'mesh_divisors' in params: self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Cutoff frequency for pseudo inversion of collision matrix if 'pinv_cutoff' in params: self._settings.set_pinv_cutoff(params['pinv_cutoff']) # Ph-ph interaction unit conversion factor if 'pp_conversion_factor' in params: self._settings.set_pp_conversion_factor( params['pp_conversion_factor']) # Read phonon-phonon interaction amplitudes from hdf5 if 'read_amplitude' in params: self._settings.set_read_amplitude(params['read_amplitude']) # Read collision matrix and gammas from hdf5 if 'read_collision' in params: self._settings.set_read_collision(params['read_collision']) # Read fc2 from hdf5 if 'read_fc2' in params: self._settings.set_read_fc2(params['read_fc2']) # Read fc3 from hdf5 if 'read_fc3' in params: self._settings.set_read_fc3(params['read_fc3']) # Read gammas from hdf5 if 'read_gamma' in params: self._settings.set_read_gamma(params['read_gamma']) # Read phonons from hdf5 if 'read_phonon' in params: self._settings.set_read_phonon(params['read_phonon']) # Calculate imag-part self energy with integration weights from gaussian # smearing function if 'run_with_g' in params: self._settings.set_run_with_g(params['run_with_g']) # Sum partial kappa at q-stars if 'is_kappa_star' in params: self._settings.set_is_kappa_star(params['is_kappa_star']) # Scattering event class 1 or 2 if 'scattering_event_class' in params: self._settings.set_scattering_event_class( params['scattering_event_class']) # Temperatures if 'temperatures' in params: self._settings.set_temperatures(params['temperatures']) # Use averaged ph-ph interaction if 'use_ave_pp' in params: self._settings.set_use_ave_pp(params['use_ave_pp']) # Write phonon-phonon interaction amplitudes to hdf5 if 'write_amplitude' in params: self._settings.set_write_amplitude(params['write_amplitude']) # Write detailed imag-part of self energy to hdf5 if 'write_detailed_gamma' in params: self._settings.set_write_detailed_gamma( params['write_detailed_gamma']) # Write imag-part of self energy to hdf5 if 'write_gamma' in params: self._settings.set_write_gamma(params['write_gamma']) # Write collision matrix and gammas to hdf5 if 'write_collision' in params: self._settings.set_write_collision(params['write_collision']) # Write all phonons on grid points to hdf5 if 'write_phonon' in params: self._settings.set_write_phonon(params['write_phonon'])
def __init__(self, filename=None, options=None, option_list=None): ConfParser.__init__(self, filename, options, option_list) self._read_options() self._parse_conf() self._settings = PhonompySettings() self._set_settings()
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Supercell size for fc2 if params.has_key('dim_extra'): self._settings.set_supercell_matrix_extra(params['dim_extra']) # Sets of band indices that are summed if params.has_key('band_indices'): self._settings.set_band_indices(params['band_indices']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if params.has_key('cutoff_pair'): self._settings.set_cutoff_pair( params['cutoff_pair']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if params.has_key('cutoff_triplet'): self._settings.set_cutoff_triplet(params['cutoff_triplet']) # Cutoff distance of reciprocal third-order force constants. if params.has_key('cutoff_radius'): self._settings.set_cutoff_radius(params['cutoff_radius']) #Cutoff sigmas for gaussian smearing. if params.has_key("cutoff_delta"): self._settings.set_cutoff_delta(params["cutoff_delta"]) # Phonon modes larger than this frequency are ignored. if params.has_key('cutoff_hfrequency'): self._settings.set_cutoff_hfrequency(params['cutoff_hfrequency']) # Phonon modes smaller than this frequency are ignored. if params.has_key('cutoff_frequency'): self._settings.set_cutoff_frequency(params['cutoff_frequency']) # Cutoff lifetime used for thermal conductivity calculation if params.has_key('cutoff_lifetime'): self._settings.set_cutoff_lifetime(params['cutoff_lifetime']) # different lifetime (relative) used for iterative method if params.has_key('diff_kappa'): self._settings.set_diff_kappa(params['diff_kappa']) # Grid points if params.has_key('grid_points'): self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if params.has_key('ion_clamped'): self._settings.set_ion_clamped(params['ion_clamped']) #Solve the Boltzmann Transport Equation Iteratively if params.has_key("is_ite"): self._settings.set_is_ite(params['is_ite']) #Solve the Boltzmann Transport Equation Iteratively using the conjugate gradient method if params.has_key("is_ite_cg"): self._settings.set_is_ite_cg(params['is_ite_cg']) #Get the image self energy for a specific grid point and band index if params.has_key("is_ise"): self._settings.set_is_ise(params['is_ise']) #The maximum iteration steps for the iterative method if params.has_key("max_ite"): self._settings.set_max_ite(params['max_ite']) #The sample length considering phonon boundary scattering if params.has_key("length"): self._settings.set_length(params['length']) # Calculate thermal conductivity in BTE-RTA if params.has_key('is_bterta'): self._settings.set_is_bterta(params['is_bterta']) # Calculate linewidths if params.has_key('is_linewidth'): self._settings.set_is_linewidth(params['is_linewidth']) # Tell Normal and Umklapp process apart if params.has_key('nu'): self._settings.set_nu(params['nu']) if params.has_key("read_fc2"): self._settings.set_read_fc2(params['read_fc2']) if params.has_key("read_fc2_extra"): self._settings.set_read_fc2_extra(params['read_fc2_extra']) if params.has_key("read_fc3"): self._settings.set_read_fc3(params['read_fc3']) # Calculate frequency_shifts if params.has_key('is_frequency_shift'): self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Mass variance parameters if params.has_key('mass_variances'): self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if params.has_key('max_freepath'): self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if params.has_key('mesh_divisors'): self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Multiple sigmas if params.has_key('multiple_sigmas'): self._settings.set_multiple_sigmas(params['multiple_sigmas']) #Adaptive smearing factor if params.has_key('adaptive_sigma_step'): if params['adaptive_sigma_step'] <= 0: print "Error! Step cannot be negative or 0" sys.exit(1) self._settings.set_adaptive_sigma_step(params['adaptive_sigma_step']) if params.has_key('kappa_write_step'): self._settings.set_kappa_write_step(params['kappa_write_step']) # Read phonon-phonon interaction amplitudes from hdf5 if params.has_key('read_amplitude'): self._settings.set_read_amplitude(params['read_amplitude']) # Read gammas from hdf5 if params.has_key('read_gamma'): self._settings.set_read_gamma(params['read_gamma']) # Sum partial kappa at q-stars if params.has_key('no_kappa_stars'): self._settings.set_no_kappa_stars(params['no_kappa_stars']) # Temperatures if params.has_key('temperatures'): self._settings.set_temperatures(params['temperatures']) # Write phonon-phonon interaction amplitudes to hdf5 if params.has_key('write_amplitude'): self._settings.set_write_amplitude(params['write_amplitude']) # Write gamma to hdf5 if params.has_key('write_gamma'): self._settings.set_write_gamma(params['write_gamma']) #write triplets to a file if params.has_key("write_triplet"): self._settings.set_write_triplet(params['write_triplet'])
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Is getting least displacements? if 'create_displacements' in params: if params['create_displacements']: self._settings.set_create_displacements('displacements') # Supercell dimension for fc2 if 'dim_fc2' in params: self._settings.set_phonon_supercell_matrix(params['dim_fc2']) # Boundary mean free path for thermal conductivity calculation if 'boundary_mfp' in params: self._settings.set_boundary_mfp(params['boundary_mfp']) # Peierls type approximation for squared ph-ph interaction strength if 'constant_averaged_pp_interaction' in params: self._settings.set_constant_averaged_pp_interaction( params['constant_averaged_pp_interaction']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if 'cutoff_fc3_distance' in params: self._settings.set_cutoff_fc3_distance(params['cutoff_fc3_distance']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if 'cutoff_pair_distance' in params: self._settings.set_cutoff_pair_distance( params['cutoff_pair_distance']) # This scale factor is multiplied to frequencies only, i.e., changes # frequencies but assumed not to change the physical unit if 'frequency_scale_factor' in params: self._settings.set_frequency_scale_factor( params['frequency_scale_factor']) # Gamma unit conversion factor if 'gamma_conversion_factor' in params: self._settings.set_gamma_conversion_factor( params['gamma_conversion_factor']) # Grid addresses (sets of three integer values) if 'grid_addresses' in params: self._settings.set_grid_addresses(params['grid_addresses']) # Grid points if 'grid_points' in params: self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if 'ion_clamped' in params: self._settings.set_ion_clamped(params['ion_clamped']) # Calculate thermal conductivity in BTE-RTA if 'is_bterta' in params: self._settings.set_is_bterta(params['is_bterta']) # Calculate frequency_shifts if 'is_frequency_shift' in params: self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Calculate full ph-ph interaction strength for RTA conductivity if 'is_full_pp' in params: self._settings.set_is_full_pp(params['is_full_pp']) # Calculate phonon-Gruneisen parameters if 'is_gruneisen' in params: self._settings.set_is_gruneisen(params['is_gruneisen']) # Calculate imaginary part of self energy if 'is_imag_self_energy' in params: self._settings.set_is_imag_self_energy(params['is_imag_self_energy']) # Calculate lifetime due to isotope scattering if 'is_isotope' in params: self._settings.set_is_isotope(params['is_isotope']) # Calculate joint-DOS if 'is_joint_dos' in params: self._settings.set_is_joint_dos(params['is_joint_dos']) # Calculate thermal conductivity in LBTE with Chaput's method if 'is_lbte' in params: self._settings.set_is_lbte(params['is_lbte']) # Calculate linewidths if 'is_linewidth' in params: self._settings.set_is_linewidth(params['is_linewidth']) # Solve reducible collision matrix but not reduced matrix if 'is_reducible_collision_matrix' in params: self._settings.set_is_reducible_collision_matrix( params['is_reducible_collision_matrix']) # Symmetrize fc2 by index exchange if 'is_symmetrize_fc2' in params: self._settings.set_is_symmetrize_fc2(params['is_symmetrize_fc2']) # Symmetrize phonon fc3 by index exchange if 'is_symmetrize_fc3_q' in params: self._settings.set_is_symmetrize_fc3_q(params['is_symmetrize_fc3_q']) # Symmetrize fc3 by index exchange if 'is_symmetrize_fc3_r' in params: self._settings.set_is_symmetrize_fc3_r(params['is_symmetrize_fc3_r']) # Mass variance parameters if 'mass_variances' in params: self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if 'max_freepath' in params: self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if 'mesh_divisors' in params: self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Cutoff frequency for pseudo inversion of collision matrix if 'pinv_cutoff' in params: self._settings.set_pinv_cutoff(params['pinv_cutoff']) # Ph-ph interaction unit conversion factor if 'pp_conversion_factor' in params: self._settings.set_pp_conversion_factor(params['pp_conversion_factor']) # Read phonon-phonon interaction amplitudes from hdf5 if 'read_amplitude' in params: self._settings.set_read_amplitude(params['read_amplitude']) # Read collision matrix and gammas from hdf5 if 'read_collision' in params: self._settings.set_read_collision(params['read_collision']) # Read fc2 from hdf5 if 'read_fc2' in params: self._settings.set_read_fc2(params['read_fc2']) # Read fc3 from hdf5 if 'read_fc3' in params: self._settings.set_read_fc3(params['read_fc3']) # Read gammas from hdf5 if 'read_gamma' in params: self._settings.set_read_gamma(params['read_gamma']) # Read phonons from hdf5 if 'read_phonon' in params: self._settings.set_read_phonon(params['read_phonon']) # Calculate imag-part self energy with integration weights from gaussian # smearing function if 'run_with_g' in params: self._settings.set_run_with_g(params['run_with_g']) # Sum partial kappa at q-stars if 'is_kappa_star' in params: self._settings.set_is_kappa_star(params['is_kappa_star']) # Scattering event class 1 or 2 if 'scattering_event_class' in params: self._settings.set_scattering_event_class( params['scattering_event_class']) # Temperatures if 'temperatures' in params: self._settings.set_temperatures(params['temperatures']) # Use averaged ph-ph interaction if 'use_ave_pp' in params: self._settings.set_use_ave_pp(params['use_ave_pp']) # Write phonon-phonon interaction amplitudes to hdf5 if 'write_amplitude' in params: self._settings.set_write_amplitude(params['write_amplitude']) # Write detailed imag-part of self energy to hdf5 if 'write_detailed_gamma' in params: self._settings.set_write_detailed_gamma( params['write_detailed_gamma']) # Write imag-part of self energy to hdf5 if 'write_gamma' in params: self._settings.set_write_gamma(params['write_gamma']) # Write collision matrix and gammas to hdf5 if 'write_collision' in params: self._settings.set_write_collision(params['write_collision']) # Write all phonons on grid points to hdf5 if 'write_phonon' in params: self._settings.set_write_phonon(params['write_phonon'])
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Supercell dimension for fc2 if params.has_key('dim_fc2'): self._settings.set_phonon_supercell_matrix(params['dim_fc2']) # Boundary mean free path for thermal conductivity calculation if params.has_key('boundary_mfp'): self._settings.set_boundary_mfp(params['boundary_mfp']) # Peierls type approximation for squared ph-ph interaction strength if params.has_key('constant_averaged_pp_interaction'): self._settings.set_constant_averaged_pp_interaction( params['constant_averaged_pp_interaction']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if params.has_key('cutoff_fc3_distance'): self._settings.set_cutoff_fc3_distance(params['cutoff_fc3_distance']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if params.has_key('cutoff_pair_distance'): self._settings.set_cutoff_pair_distance( params['cutoff_pair_distance']) # Grid addresses (sets of three integer values) if params.has_key('grid_addresses'): self._settings.set_grid_addresses(params['grid_addresses']) # Grid points if params.has_key('grid_points'): self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if params.has_key('ion_clamped'): self._settings.set_ion_clamped(params['ion_clamped']) # Calculate thermal conductivity in BTE-RTA if params.has_key('is_bterta'): self._settings.set_is_bterta(params['is_bterta']) # Calculate lifetime due to isotope scattering if params.has_key('is_isotope'): self._settings.set_is_isotope(params['is_isotope']) # Calculate thermal conductivity in LBTE with Chaput's method if params.has_key('is_lbte'): self._settings.set_is_lbte(params['is_lbte']) # Calculate linewidths if params.has_key('is_linewidth'): self._settings.set_is_linewidth(params['is_linewidth']) # Calculate frequency_shifts if params.has_key('is_frequency_shift'): self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Mass variance parameters if params.has_key('mass_variances'): self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if params.has_key('max_freepath'): self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if params.has_key('mesh_divisors'): self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Cutoff frequency for pseudo inversion of collision matrix if params.has_key('pinv_cutoff'): self._settings.set_pinv_cutoff(params['pinv_cutoff']) # Read phonon-phonon interaction amplitudes from hdf5 if params.has_key('read_amplitude'): self._settings.set_read_amplitude(params['read_amplitude']) # Read gammas from hdf5 if params.has_key('read_gamma'): self._settings.set_read_gamma(params['read_gamma']) # Read collision matrix and gammas from hdf5 if params.has_key('read_collision'): self._settings.set_read_collision(params['read_collision']) # Sum partial kappa at q-stars if params.has_key('no_kappa_stars'): self._settings.set_no_kappa_stars(params['no_kappa_stars']) # Scattering event class 1 or 2 if params.has_key('scattering_event_class'): self._settings.set_scattering_event_class( params['scattering_event_class']) # Temperatures if params.has_key('temperatures'): self._settings.set_temperatures(params['temperatures']) # Use averaged ph-ph interaction if params.has_key('average_pp_interaction'): self._settings.set_average_pp_interaction( params['average_pp_interaction']) # Write phonon-phonon interaction amplitudes to hdf5 if params.has_key('write_amplitude'): self._settings.set_write_amplitude(params['write_amplitude']) # Write gammas to hdf5 if params.has_key('write_gamma'): self._settings.set_write_gamma(params['write_gamma']) # Write collision matrix and gammas to hdf5 if params.has_key('write_collision'): self._settings.set_write_collision(params['write_collision'])
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Supercell size for fc2 if params.has_key('dim_extra'): self._settings.set_supercell_matrix_extra(params['dim_extra']) # Sets of band indices that are summed if params.has_key('band_indices'): self._settings.set_band_indices(params['band_indices']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if params.has_key('cutoff_pair'): self._settings.set_cutoff_pair(params['cutoff_pair']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if params.has_key('cutoff_triplet'): self._settings.set_cutoff_triplet(params['cutoff_triplet']) # Cutoff distance of reciprocal third-order force constants. if params.has_key('cutoff_radius'): self._settings.set_cutoff_radius(params['cutoff_radius']) #Cutoff sigmas for gaussian smearing. if params.has_key("cutoff_delta"): self._settings.set_cutoff_delta(params["cutoff_delta"]) # Phonon modes larger than this frequency are ignored. if params.has_key('cutoff_hfrequency'): self._settings.set_cutoff_hfrequency(params['cutoff_hfrequency']) # Phonon modes smaller than this frequency are ignored. if params.has_key('cutoff_frequency'): self._settings.set_cutoff_frequency(params['cutoff_frequency']) # Cutoff lifetime used for thermal conductivity calculation if params.has_key('cutoff_lifetime'): self._settings.set_cutoff_lifetime(params['cutoff_lifetime']) # different lifetime (relative) used for iterative method if params.has_key('diff_kappa'): self._settings.set_diff_kappa(params['diff_kappa']) # Grid points if params.has_key('grid_points'): self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if params.has_key('ion_clamped'): self._settings.set_ion_clamped(params['ion_clamped']) #Solve the Boltzmann Transport Equation Iteratively if params.has_key("is_ite"): self._settings.set_is_ite(params['is_ite']) #Solve the Boltzmann Transport Equation Iteratively using the conjugate gradient method if params.has_key("is_ite_cg"): self._settings.set_is_ite_cg(params['is_ite_cg']) #Get the image self energy for a specific grid point and band index if params.has_key("is_ise"): self._settings.set_is_ise(params['is_ise']) #The maximum iteration steps for the iterative method if params.has_key("max_ite"): self._settings.set_max_ite(params['max_ite']) #The sample length considering phonon boundary scattering if params.has_key("length"): self._settings.set_length(params['length']) # Calculate thermal conductivity in BTE-RTA if params.has_key('is_bterta'): self._settings.set_is_bterta(params['is_bterta']) # Calculate linewidths if params.has_key('is_linewidth'): self._settings.set_is_linewidth(params['is_linewidth']) # Tell Normal and Umklapp process apart if params.has_key('nu'): self._settings.set_nu(params['nu']) if params.has_key("read_fc2"): self._settings.set_read_fc2(params['read_fc2']) if params.has_key("read_fc2_extra"): self._settings.set_read_fc2_extra(params['read_fc2_extra']) if params.has_key("read_fc3"): self._settings.set_read_fc3(params['read_fc3']) # Calculate frequency_shifts if params.has_key('is_frequency_shift'): self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Mass variance parameters if params.has_key('mass_variances'): self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if params.has_key('max_freepath'): self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if params.has_key('mesh_divisors'): self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Multiple sigmas if params.has_key('multiple_sigmas'): self._settings.set_multiple_sigmas(params['multiple_sigmas']) #Adaptive smearing factor if params.has_key('adaptive_sigma_step'): if params['adaptive_sigma_step'] <= 0: print "Error! Step cannot be negative or 0" sys.exit(1) self._settings.set_adaptive_sigma_step( params['adaptive_sigma_step']) if params.has_key('kappa_write_step'): self._settings.set_kappa_write_step(params['kappa_write_step']) # Read phonon-phonon interaction amplitudes from hdf5 if params.has_key('read_amplitude'): self._settings.set_read_amplitude(params['read_amplitude']) # Read gammas from hdf5 if params.has_key('read_gamma'): self._settings.set_read_gamma(params['read_gamma']) # Sum partial kappa at q-stars if params.has_key('no_kappa_stars'): self._settings.set_no_kappa_stars(params['no_kappa_stars']) # Temperatures if params.has_key('temperatures'): self._settings.set_temperatures(params['temperatures']) # Write phonon-phonon interaction amplitudes to hdf5 if params.has_key('write_amplitude'): self._settings.set_write_amplitude(params['write_amplitude']) # Write gamma to hdf5 if params.has_key('write_gamma'): self._settings.set_write_gamma(params['write_gamma']) #write triplets to a file if params.has_key("write_triplet"): self._settings.set_write_triplet(params['write_triplet'])
def _parse_conf(self): ConfParser.parse_conf(self) confs = self._confs for conf_key in confs.keys(): # Boolean if conf_key in ('read_fc2', 'read_fc3', 'read_gamma', 'read_phonon', 'read_pp', 'use_ave_pp', 'collective_phonon', 'write_gamma_detail', 'write_gamma', 'write_collision', 'write_phonon', 'write_pp', 'write_LBTE_solution', 'full_pp', 'ion_clamped', 'bterta', 'compact_fc', 'real_self_energy', 'gruneisen', 'imag_self_energy', 'isotope', 'joint_dos', 'lbte', 'N_U', 'spectral_function', 'reducible_collision_matrix', 'symmetrize_fc2', 'symmetrize_fc3_q', 'symmetrize_fc3_r', 'kappa_star'): if confs[conf_key].lower() == '.true.': self.set_parameter(conf_key, True) elif confs[conf_key].lower() == '.false.': self.set_parameter(conf_key, False) # float if conf_key in ('boundary_mfp', 'cutoff_fc3_distance', 'cutoff_pair_distance', 'gamma_conversion_factor', 'max_freepath', 'pinv_cutoff', 'pp_conversion_factor', 'sigma_cutoff_width'): self.set_parameter(conf_key, float(confs[conf_key])) # int if conf_key in ('pinv_solver', 'num_points_in_batch'): self.set_parameter(conf_key, int(confs[conf_key])) # specials if conf_key in ('create_forces_fc2', 'create_forces_fc3'): if type(confs[conf_key]) is str: fnames = confs[conf_key].split() else: fnames = confs[conf_key] self.set_parameter(conf_key, fnames) if conf_key == 'dim_fc2': matrix = [int(x) for x in confs['dim_fc2'].split()] if len(matrix) == 9: matrix = np.array(matrix).reshape(3, 3) elif len(matrix) == 3: matrix = np.diag(matrix) else: self.setting_error( "Number of elements of dim2 has to be 3 or 9.") if matrix.shape == (3, 3): if np.linalg.det(matrix) < 1: self.setting_error( "Determinant of supercell matrix has " + "to be positive.") else: self.set_parameter('dim_fc2', matrix) if conf_key in ('constant_averaged_pp_interaction' 'const_ave_pp'): self.set_parameter('const_ave_pp', float(confs['const_ave_pp'])) if conf_key == 'grid_addresses': vals = [ int(x) for x in confs['grid_addresses'].replace(',', ' ').split() ] if len(vals) % 3 == 0 and len(vals) > 0: self.set_parameter('grid_addresses', np.reshape(vals, (-1, 3))) else: self.setting_error("Grid addresses are incorrectly set.") if conf_key == 'grid_points': vals = [ int(x) for x in confs['grid_points'].replace(',', ' ').split() ] self.set_parameter('grid_points', vals) if conf_key == 'lapack_zheev_uplo': self.set_parameter('lapack_zheev_uplo', confs['lapack_zheev_uplo'].upper()) if conf_key == 'mass_variances': vals = [fracval(x) for x in confs['mass_variances'].split()] if len(vals) < 1: self.setting_error( "Mass variance parameters are incorrectly set.") else: self.set_parameter('mass_variances', vals) if conf_key == 'mesh_divisors': vals = [x for x in confs['mesh_divisors'].split()] if len(vals) == 3: self.set_parameter('mesh_divisors', [int(x) for x in vals]) elif len(vals) == 6: divs = [int(x) for x in vals[:3]] is_shift = [x.lower() == 't' for x in vals[3:]] for i in range(3): if is_shift[i] and (divs[i] % 2 != 0): is_shift[i] = False self.setting_error( "Coarse grid shift along the " + ["first", "second", "third"][i] + " axis is not allowed.") self.set_parameter('mesh_divisors', divs + is_shift) else: self.setting_error("Mesh divisors are incorrectly set.") if conf_key == 'read_collision': if confs['read_collision'] == 'all': self.set_parameter('read_collision', 'all') else: vals = [int(x) for x in confs['read_collision'].split()] self.set_parameter('read_collision', vals) if conf_key == 'scattering_event_class': self.set_parameter('scattering_event_class', int(confs['scattering_event_class']))
def _read_options(self): ConfParser.read_options(self) # store data in self._confs if 'phonon_supercell_dimension' in self._args: dim_fc2 = self._args.phonon_supercell_dimension if dim_fc2 is not None: self._confs['dim_fc2'] = " ".join(dim_fc2) if 'boundary_mfp' in self._args: if self._args.boundary_mfp is not None: self._confs['boundary_mfp'] = self._args.boundary_mfp if 'const_ave_pp' in self._args: const_ave_pp = self._args.const_ave_pp if const_ave_pp is not None: self._confs['const_ave_pp'] = const_ave_pp if 'create_forces_fc2' in self._args: if self._args.create_forces_fc2: self._confs['create_forces_fc2'] = self._args.create_forces_fc2 if 'create_forces_fc3' in self._args: if self._args.create_forces_fc3: self._confs['create_forces_fc3'] = self._args.create_forces_fc3 if 'create_forces_fc3_file' in self._args: if self._args.create_forces_fc3_file: cfc3_file = self._args.create_forces_fc3_file self._confs['create_forces_fc3_file'] = cfc3_file if 'cutoff_fc3_distance' in self._args: cutoff_fc3 = self._args.cutoff_fc3_distance if cutoff_fc3 is not None: self._confs['cutoff_fc3_distance'] = cutoff_fc3 if 'cutoff_pair_distance' in self._args: cutoff_pair = self._args.cutoff_pair_distance if cutoff_pair is not None: self._confs['cutoff_pair_distance'] = cutoff_pair if 'gamma_conversion_factor' in self._args: g_conv_factor = self._args.gamma_conversion_factor if g_conv_factor is not None: self._confs['gamma_conversion_factor'] = g_conv_factor if 'grid_addresses' in self._args: grid_adrs = self._args.grid_addresses if grid_adrs is not None: self._confs['grid_addresses'] = " ".join(grid_adrs) if 'grid_points' in self._args: if self._args.grid_points is not None: self._confs['grid_points'] = " ".join(self._args.grid_points) if 'ion_clamped' in self._args: if self._args.ion_clamped: self._confs['ion_clamped'] = '.true.' if 'is_bterta' in self._args: if self._args.is_bterta: self._confs['bterta'] = '.true.' if 'is_compact_fc' in self._args: if self._args.is_compact_fc: self._confs['compact_fc'] = '.true.' if 'is_gruneisen' in self._args: if self._args.is_gruneisen: self._confs['gruneisen'] = '.true.' if 'is_full_pp' in self._args: if self._args.is_full_pp: self._confs['full_pp'] = '.true.' if 'is_imag_self_energy' in self._args: if self._args.is_imag_self_energy: self._confs['imag_self_energy'] = '.true.' if 'is_isotope' in self._args: if self._args.is_isotope: self._confs['isotope'] = '.true.' if 'is_joint_dos' in self._args: if self._args.is_joint_dos: self._confs['joint_dos'] = '.true.' if 'no_kappa_stars' in self._args: if self._args.no_kappa_stars: self._confs['kappa_star'] = '.false.' if 'is_lbte' in self._args: if self._args.is_lbte: self._confs['lbte'] = '.true.' if 'is_N_U' in self._args: if self._args.is_N_U: self._confs['N_U'] = '.true.' if 'is_real_self_energy' in self._args: if self._args.is_real_self_energy: self._confs['real_self_energy'] = '.true.' if 'is_reducible_collision_matrix' in self._args: if self._args.is_reducible_collision_matrix: self._confs['reducible_collision_matrix'] = '.true.' if 'is_spectral_function' in self._args: if self._args.is_spectral_function: self._confs['spectral_function'] = '.true.' if 'is_symmetrize_fc2' in self._args: if self._args.is_symmetrize_fc2: self._confs['symmetrize_fc2'] = '.true.' if 'is_symmetrize_fc3_q' in self._args: if self._args.is_symmetrize_fc3_q: self._confs['symmetrize_fc3_q'] = '.true.' if 'is_symmetrize_fc3_r' in self._args: if self._args.is_symmetrize_fc3_r: self._confs['symmetrize_fc3_r'] = '.true.' if 'lapack_zheev_uplo' in self._args: if self._args.lapack_zheev_uplo is not None: self._confs['lapack_zheev_uplo'] = self._args.lapack_zheev_uplo if 'mass_variances' in self._args: mass_variances = self._args.mass_variances if mass_variances is not None: self._confs['mass_variances'] = " ".join(mass_variances) if 'max_freepath' in self._args: if self._args.max_freepath is not None: self._confs['max_freepath'] = self._args.max_freepath if 'mesh_divisors' in self._args: mesh_divisors = self._args.mesh_divisors if mesh_divisors is not None: self._confs['mesh_divisors'] = " ".join(mesh_divisors) if 'num_points_in_batch' in self._args: num_points_in_batch = self._args.num_points_in_batch if num_points_in_batch is not None: self._confs['num_points_in_batch'] = num_points_in_batch if 'pinv_cutoff' in self._args: if self._args.pinv_cutoff is not None: self._confs['pinv_cutoff'] = self._args.pinv_cutoff if 'pinv_solver' in self._args: if self._args.pinv_solver is not None: self._confs['pinv_solver'] = self._args.pinv_solver if 'pp_conversion_factor' in self._args: pp_conv_factor = self._args.pp_conversion_factor if pp_conv_factor is not None: self._confs['pp_conversion_factor'] = pp_conv_factor if 'read_fc2' in self._args: if self._args.read_fc2: self._confs['read_fc2'] = '.true.' if 'read_fc3' in self._args: if self._args.read_fc3: self._confs['read_fc3'] = '.true.' if 'read_gamma' in self._args: if self._args.read_gamma: self._confs['read_gamma'] = '.true.' if 'read_phonon' in self._args: if self._args.read_phonon: self._confs['read_phonon'] = '.true.' if 'read_pp' in self._args: if self._args.read_pp: self._confs['read_pp'] = '.true.' if 'read_collision' in self._args: if self._args.read_collision is not None: self._confs['read_collision'] = self._args.read_collision if 'scattering_event_class' in self._args: scatt_class = self._args.scattering_event_class if scatt_class is not None: self._confs['scattering_event_class'] = scatt_class if 'sigma_cutoff_width' in self._args: sigma_cutoff = self._args.sigma_cutoff_width if sigma_cutoff is not None: self._confs['sigma_cutoff_width'] = sigma_cutoff if 'solve_collective_phonon' in self._args: if self._args.solve_collective_phonon: self._confs['collective_phonon'] = '.true.' if 'subtract_forces' in self._args: if self._args.subtract_forces: self._confs['subtract_forces'] = self._args.subtract_forces if 'use_ave_pp' in self._args: if self._args.use_ave_pp: self._confs['use_ave_pp'] = '.true.' if 'write_gamma_detail' in self._args: if self._args.write_gamma_detail: self._confs['write_gamma_detail'] = '.true.' if 'write_gamma' in self._args: if self._args.write_gamma: self._confs['write_gamma'] = '.true.' if 'write_collision' in self._args: if self._args.write_collision: self._confs['write_collision'] = '.true.' if 'write_phonon' in self._args: if self._args.write_phonon: self._confs['write_phonon'] = '.true.' if 'write_pp' in self._args: if self._args.write_pp: self._confs['write_pp'] = '.true.' if 'write_LBTE_solution' in self._args: if self._args.write_LBTE_solution: self._confs['write_LBTE_solution'] = '.true.'
def _set_settings(self): ConfParser.set_settings(self) params = self._parameters # Supercell size for fc2 if params.has_key('dim_extra'): self._settings.set_phonon_supercell_matrix(params['dim_extra']) # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if params.has_key('cutoff_fc3_distance'): self._settings.set_cutoff_fc3_distance(params['cutoff_fc3_distance']) # Cutoff distance between pairs of displaced atoms used for supercell # creation with displacements and making third-order force constants if params.has_key('cutoff_pair_distance'): self._settings.set_cutoff_pair_distance( params['cutoff_pair_distance']) # Phonon modes below this frequency are ignored. if params.has_key('cutoff_frequency'): self._settings.set_cutoff_frequency(params['cutoff_frequency']) # Cutoff lifetime used for thermal conductivity calculation if params.has_key('cutoff_lifetime'): self._settings.set_cutoff_lifetime(params['cutoff_lifetime']) # Grid points if params.has_key('grid_points'): self._settings.set_grid_points(params['grid_points']) # Atoms are clamped under applied strain in Gruneisen parameter calculation if params.has_key('ion_clamped'): self._settings.set_ion_clamped(params['ion_clamped']) # Calculate thermal conductivity in BTE-RTA if params.has_key('is_bterta'): self._settings.set_is_bterta(params['is_bterta']) # Calculate thermal conductivity in LBTE with Chaput's method if params.has_key('is_lbte'): self._settings.set_is_lbte(params['is_lbte']) # Calculate linewidths if params.has_key('is_linewidth'): self._settings.set_is_linewidth(params['is_linewidth']) # Calculate frequency_shifts if params.has_key('is_frequency_shift'): self._settings.set_is_frequency_shift(params['is_frequency_shift']) # Mass variance parameters if params.has_key('mass_variances'): self._settings.set_mass_variances(params['mass_variances']) # Maximum mean free path if params.has_key('max_freepath'): self._settings.set_max_freepath(params['max_freepath']) # Divisors for mesh numbers if params.has_key('mesh_divisors'): self._settings.set_mesh_divisors(params['mesh_divisors'][:3]) if len(params['mesh_divisors']) > 3: self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) # Read phonon-phonon interaction amplitudes from hdf5 if params.has_key('read_amplitude'): self._settings.set_read_amplitude(params['read_amplitude']) # Read gammas from hdf5 if params.has_key('read_gamma'): self._settings.set_read_gamma(params['read_gamma']) # Read collision matrix and gammas from hdf5 if params.has_key('read_collision'): self._settings.set_read_collision(params['read_collision']) # Sum partial kappa at q-stars if params.has_key('no_kappa_stars'): self._settings.set_no_kappa_stars(params['no_kappa_stars']) # Temperatures if params.has_key('temperatures'): self._settings.set_temperatures(params['temperatures']) # Write phonon-phonon interaction amplitudes to hdf5 if params.has_key('write_amplitude'): self._settings.set_write_amplitude(params['write_amplitude']) # Write gammas to hdf5 if params.has_key('write_gamma'): self._settings.set_write_gamma(params['write_gamma']) # Write collision matrix and gammas to hdf5 if params.has_key('write_collision'): self._settings.set_write_collision(params['write_collision'])