def _create_phono3py_fc3(phono3py, tsym_type, symmetrize_fc3_r, symmetrize_fc2, cutoff_distance, input_filename, output_filename, log_level): if input_filename is None: filename = 'disp_fc3.yaml' else: filename = 'disp_fc3.' + input_filename + '.yaml' file_exists(filename, log_level) if log_level: print("Displacement dataset is read from %s." % filename) disp_dataset = parse_disp_fc3_yaml(filename=filename) file_exists("FORCES_FC3", log_level) if log_level: print("Sets of supercell forces are read from %s." % "FORCES_FC3") forces_fc3 = parse_FORCES_FC3(disp_dataset) phono3py.produce_fc3(forces_fc3, displacement_dataset=disp_dataset, cutoff_distance=cutoff_distance, translational_symmetry_type=tsym_type, is_permutation_symmetry=symmetrize_fc3_r, is_permutation_symmetry_fc2=symmetrize_fc2) if output_filename is None: filename = 'fc3.hdf5' else: filename = 'fc3.' + output_filename + '.hdf5' if log_level: print("Writing fc3 to %s" % filename) write_fc3_to_hdf5(phono3py.get_fc3(), filename=filename)
def _create_phono3py_fc3(phono3py, energy_to_eV, distance_to_A, tsym_type, symmetrize_fc3_r, symmetrize_fc2, cutoff_distance, input_filename, output_filename, log_level): if input_filename is None: filename = 'disp_fc3.yaml' else: filename = 'disp_fc3.' + input_filename + '.yaml' file_exists(filename, log_level) if log_level: print("Displacement dataset is read from %s." % filename) disp_dataset = parse_disp_fc3_yaml(filename=filename) num_atom = phono3py.get_supercell().get_number_of_atoms() if disp_dataset['natom'] != num_atom: print("Number of atoms in supercell is not consistent with %s" % filename) if log_level: print_error() sys.exit(1) _convert_displacement_unit(disp_dataset, distance_to_A) file_exists("FORCES_FC3", log_level) if log_level: print("Sets of supercell forces are read from %s." % "FORCES_FC3") forces_fc3 = parse_FORCES_FC3(disp_dataset) if not forces_fc3: return False _convert_force_unit(forces_fc3, energy_to_eV, distance_to_A) phono3py.produce_fc3( forces_fc3, displacement_dataset=disp_dataset, cutoff_distance=cutoff_distance, translational_symmetry_type=tsym_type, is_permutation_symmetry=symmetrize_fc3_r, is_permutation_symmetry_fc2=symmetrize_fc2) if output_filename is None: filename = 'fc3.hdf5' else: filename = 'fc3.' + output_filename + '.hdf5' if log_level: print("Writing fc3 to %s" % filename) write_fc3_to_hdf5(phono3py.get_fc3(), filename=filename) return True
def _create_phono3py_fc3(phono3py, energy_to_eV, distance_to_A, tsym_type, symmetrize_fc3_r, symmetrize_fc2, cutoff_distance, input_filename, output_filename, log_level): if input_filename is None: filename = 'disp_fc3.yaml' else: filename = 'disp_fc3.' + input_filename + '.yaml' file_exists(filename, log_level) if log_level: print("Displacement dataset is read from %s." % filename) disp_dataset = parse_disp_fc3_yaml(filename=filename) num_atom = phono3py.get_supercell().get_number_of_atoms() if disp_dataset['natom'] != num_atom: print("Number of atoms in supercell is not consistent with %s" % filename) if log_level: print_error() sys.exit(1) _convert_displacement_unit(disp_dataset, distance_to_A) file_exists("FORCES_FC3", log_level) if log_level: print("Sets of supercell forces are read from %s." % "FORCES_FC3") forces_fc3 = parse_FORCES_FC3(disp_dataset) if not forces_fc3: return False _convert_force_unit(forces_fc3, energy_to_eV, distance_to_A) phono3py.produce_fc3(forces_fc3, displacement_dataset=disp_dataset, cutoff_distance=cutoff_distance, translational_symmetry_type=tsym_type, is_permutation_symmetry=symmetrize_fc3_r, is_permutation_symmetry_fc2=symmetrize_fc2) if output_filename is None: filename = 'fc3.hdf5' else: filename = 'fc3.' + output_filename + '.hdf5' if log_level: print("Writing fc3 to %s" % filename) write_fc3_to_hdf5(phono3py.get_fc3(), filename=filename) return True