def create_FORCE_SETS(interface_mode, force_filenames, symprec=1e-5, is_wien2k_p1=False, force_sets_zero_mode=False, disp_filename='disp.yaml', force_sets_filename='FORCE_SETS', log_level=0): if (interface_mode is None or interface_mode == 'vasp' or interface_mode == 'pwmat' or interface_mode == 'abinit' or interface_mode == 'elk' or interface_mode == 'pwscf' or interface_mode == 'siesta' or interface_mode == 'crystal'): disp_dataset = parse_disp_yaml(filename=disp_filename) num_atoms = disp_dataset['natom'] num_displacements = len(disp_dataset['first_atoms']) if force_sets_zero_mode: num_displacements += 1 force_sets = get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename, verbose=(log_level > 0)) elif interface_mode == 'wien2k': disp_dataset, supercell = parse_disp_yaml(filename=disp_filename, return_cell=True) from phonopy.interface.wien2k import parse_set_of_forces num_displacements = len(disp_dataset['first_atoms']) if force_sets_zero_mode: num_displacements += 1 if _check_number_of_files(num_displacements, force_filenames, disp_filename): force_sets = [] else: disps = [[d['number'], d['displacement']] for d in disp_dataset['first_atoms']] force_sets = parse_set_of_forces(disps, force_filenames, supercell, is_distribute=(not is_wien2k_p1), symprec=symprec, verbose=(log_level > 0)) else: force_sets = [] if force_sets: if force_sets_zero_mode: force_sets = _subtract_residual_forces(force_sets) for forces, disp in zip(force_sets, disp_dataset['first_atoms']): disp['forces'] = forces write_FORCE_SETS(disp_dataset, filename=force_sets_filename) if log_level > 0: if force_sets: print("%s has been created." % force_sets_filename) else: print("%s could not be created." % force_sets_filename) return 0
def get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename, verbose=True): if _check_number_of_files(num_displacements, force_filenames, disp_filename): return [] if interface_mode is None or interface_mode == 'vasp': from phonopy.interface.vasp import parse_set_of_forces elif interface_mode == 'pwmat': from pwmat2phonopy.interface.pwmat import parse_set_of_forces elif interface_mode == 'abinit': from phonopy.interface.abinit import parse_set_of_forces elif interface_mode == 'pwscf': from phonopy.interface.pwscf import parse_set_of_forces elif interface_mode == 'elk': from phonopy.interface.elk import parse_set_of_forces elif interface_mode == 'siesta': from phonopy.interface.siesta import parse_set_of_forces elif interface_mode == 'crystal': from phonopy.interface.crystal import parse_set_of_forces else: return [] force_sets = parse_set_of_forces(num_atoms, force_filenames, verbose=verbose) return force_sets
def get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename, verbose=True): if _check_number_of_files(num_displacements, force_filenames, disp_filename): return [] if interface_mode is None or interface_mode == 'vasp': from phonopy.interface.vasp import parse_set_of_forces elif interface_mode == 'abinit': from phonopy.interface.abinit import parse_set_of_forces elif interface_mode == 'pwscf': from phonopy.interface.pwscf import parse_set_of_forces elif interface_mode == 'elk': from phonopy.interface.elk import parse_set_of_forces elif interface_mode == 'siesta': from phonopy.interface.siesta import parse_set_of_forces else: return [] force_sets = parse_set_of_forces(num_atoms, force_filenames, verbose=verbose) return force_sets
def get_force_sets(interface_mode, num_atoms, force_filenames): if interface_mode is None or interface_mode == 'vasp': from phonopy.interface.vasp import parse_set_of_forces force_sets = parse_set_of_forces(num_atoms, force_filenames) elif interface_mode == 'abinit': from phonopy.interface.abinit import parse_set_of_forces force_sets = parse_set_of_forces(num_atoms, force_filenames) elif interface_mode == 'pwscf': from phonopy.interface.pwscf import parse_set_of_forces force_sets = parse_set_of_forces(num_atoms, force_filenames) elif interface_mode == 'elk': from phonopy.interface.elk import parse_set_of_forces force_sets = parse_set_of_forces(num_atoms, force_filenames) elif interface_mode == 'siesta': from phonopy.interface.siesta import parse_set_of_forces force_sets = parse_set_of_forces(num_atoms, force_filenames) return force_sets
def create_FORCE_SETS(interface_mode, force_filenames, symprec, is_wien2k_p1=False, force_sets_zero_mode=False, log_level=0): if (interface_mode is None or interface_mode == 'vasp' or interface_mode == 'abinit' or interface_mode == 'elk' or interface_mode == 'pwscf' or interface_mode == 'siesta'): displacements = parse_disp_yaml(filename='disp.yaml') num_atoms = displacements['natom'] if _check_number_of_files(displacements, force_filenames, force_sets_zero_mode): return 1 force_sets = _get_force_sets(interface_mode, num_atoms, force_filenames) elif interface_mode == 'wien2k': displacements, supercell = parse_disp_yaml(filename='disp.yaml', return_cell=True) from phonopy.interface.wien2k import parse_set_of_forces if _check_number_of_files(displacements, force_filenames, force_sets_zero_mode): return 1 force_sets = parse_set_of_forces( displacements, force_filenames, supercell, disp_keyword='first_atoms', is_distribute=(not is_wien2k_p1), symprec=symprec) else: force_sets = [] if force_sets: if force_sets_zero_mode: force_sets = _subtract_residual_forces(force_sets) for forces, disp in zip(force_sets, displacements['first_atoms']): disp['forces'] = forces write_FORCE_SETS(displacements, filename='FORCE_SETS') if log_level > 0: if force_sets: print("FORCE_SETS has been created.") else: print("FORCE_SETS could not be created.") return 0
def create_FORCE_SETS(interface_mode, force_filenames, symprec, is_wien2k_p1=False, log_level=0): if (interface_mode is None or interface_mode == 'vasp' or interface_mode == 'abinit' or interface_mode == 'elk' or interface_mode == 'pwscf' or interface_mode == 'siesta'): displacements = parse_disp_yaml(filename='disp.yaml') num_atoms = displacements['natom'] if len(displacements['first_atoms']) != len(force_filenames): print('') print("Number of files to be read don't match " "to number of displacements in disp.yaml.") return 1 force_sets = get_force_sets(interface_mode, num_atoms, force_filenames) elif interface_mode == 'wien2k': displacements, supercell = parse_disp_yaml(filename='disp.yaml', return_cell=True) if len(displacements['first_atoms']) != len(force_filenames): print('') print("Number of files to be read don't match " "to number of displacements in disp.yaml.") return 1 from phonopy.interface.wien2k import parse_set_of_forces force_sets = parse_set_of_forces( displacements, force_filenames, supercell, disp_keyword='first_atoms', is_distribute=(not is_wien2k_p1), symprec=symprec) else: force_sets = [] if force_sets: for forces, disp in zip(force_sets, displacements['first_atoms']): disp['forces'] = forces write_FORCE_SETS(displacements, filename='FORCE_SETS') if log_level > 0: if force_sets: print("FORCE_SETS has been created.") else: print("FORCE_SETS could not be created.") return 0
def create_FORCE_SETS(interface_mode, force_filenames, options, log_level=0): if (interface_mode == 'vasp' or interface_mode == 'abinit' or interface_mode == 'elk' or interface_mode == 'pwscf' or interface_mode == 'siesta'): displacements = parse_disp_yaml(filename='disp.yaml') num_atoms = displacements['natom'] if len(displacements['first_atoms']) != len(force_filenames): print('') print("Number of files to be read don't match " "to number of displacements in disp.yaml.") return 1 force_sets = get_force_sets(interface_mode, num_atoms, force_filenames) elif interface_mode == 'wien2k': displacements, supercell = parse_disp_yaml(filename='disp.yaml', return_cell=True) if len(displacements['first_atoms']) != len(force_filenames): print('') print("Number of files to be read don't match " "to number of displacements in disp.yaml.") return 1 from phonopy.interface.wien2k import parse_set_of_forces force_sets = parse_set_of_forces( displacements, force_filenames, supercell, disp_keyword='first_atoms', is_distribute=(not options.is_wien2k_p1), symprec=options.symprec) else: force_sets = [] if force_sets: for forces, disp in zip(force_sets, displacements['first_atoms']): disp['forces'] = forces write_FORCE_SETS(displacements, filename='FORCE_SETS') if log_level > 0: if force_sets: print("FORCE_SETS has been created.") else: print("FORCE_SETS could not be created.") return 0
def get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename=None, check_number_of_files=False, verbose=True): if check_number_of_files: if _check_number_of_files(num_displacements, force_filenames, disp_filename): return [] if interface_mode is None or interface_mode == 'vasp': from phonopy.interface.vasp import parse_set_of_forces elif interface_mode == 'abinit': from phonopy.interface.abinit import parse_set_of_forces elif interface_mode == 'qe': from phonopy.interface.qe import parse_set_of_forces elif interface_mode == 'elk': from phonopy.interface.elk import parse_set_of_forces elif interface_mode == 'siesta': from phonopy.interface.siesta import parse_set_of_forces elif interface_mode == 'cp2k': from phonopy.interface.cp2k import parse_set_of_forces elif interface_mode == 'crystal': from phonopy.interface.crystal import parse_set_of_forces elif interface_mode == 'dftbp': from phonopy.interface.dftbp import parse_set_of_forces elif interface_mode == 'turbomole': from phonopy.interface.turbomole import parse_set_of_forces else: return [] force_sets = parse_set_of_forces(num_atoms, force_filenames, verbose=verbose) return force_sets
def create_FORCE_SETS(interface_mode, force_filenames, symmetry_tolerance=None, is_wien2k_p1=False, force_sets_zero_mode=False, disp_filename='disp.yaml', force_sets_filename='FORCE_SETS', log_level=0): if log_level > 0: if interface_mode: print("Calculator interface: %s" % interface_mode) print("Displacements were read from \"%s\"." % disp_filename) if disp_filename == 'disp.yaml': print('') print("NOTE:") print(" From phonopy v2.0, displacements are written into " "\"phonopy_disp.yaml\".") print(" \"disp.yaml\" is still supported for reading, but is " "deprecated.") print('') if force_sets_zero_mode: print("Forces in %s are subtracted from forces in all " "other files." % force_filenames[0]) if disp_filename == 'disp.yaml': disp_dataset, supercell = parse_disp_yaml(filename=disp_filename, return_cell=True) else: phpy = PhonopyYaml() phpy.read(disp_filename) supercell = phpy.supercell disp_dataset = phpy.dataset if 'natom' in disp_dataset: # type-1 dataset num_atoms = disp_dataset['natom'] num_displacements = len(disp_dataset['first_atoms']) dataset_type = 1 elif 'displacements' in disp_dataset: # type-2 dataset num_atoms = disp_dataset['displacements'].shape[1] num_displacements = disp_dataset['displacements'].shape[0] dataset_type = 2 else: raise RuntimeError("Number of atoms could not be retrieved from %s" % disp_filename) if force_sets_zero_mode: num_displacements += 1 if interface_mode in (None, 'vasp', 'abinit', 'elk', 'qe', 'siesta', 'cp2k', 'crystal', 'dftbp', 'turbomole'): force_sets = get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename=disp_filename, check_number_of_files=True, verbose=(log_level > 0)) elif interface_mode == 'wien2k': from phonopy.interface.wien2k import parse_set_of_forces if not _check_number_of_files(num_displacements, force_filenames, disp_filename): force_sets = [] else: disps, _ = get_displacements_and_forces(disp_dataset) force_sets = parse_set_of_forces( disps, force_filenames, supercell, is_distribute=(not is_wien2k_p1), symmetry_tolerance=symmetry_tolerance, verbose=(log_level > 0)) else: force_sets = [] if force_sets: if force_sets_zero_mode: force_sets = _subtract_residual_forces(force_sets) if dataset_type == 1: for forces, disp in zip(force_sets, disp_dataset['first_atoms']): disp['forces'] = forces elif dataset_type == 2: disp_dataset['forces'] = np.array(force_sets, dtype='double', order='C') else: raise RuntimeError("FORCE_SETS could not be created.") write_FORCE_SETS(disp_dataset, filename=force_sets_filename) if log_level > 0: if force_sets: print("%s has been created." % force_sets_filename) else: print("%s could not be created." % force_sets_filename) return 0
def create_FORCE_SETS(interface_mode, force_filenames, symmetry_tolerance=None, is_wien2k_p1=False, force_sets_zero_mode=False, disp_filename='disp.yaml', force_sets_filename='FORCE_SETS', log_level=0): if log_level > 0: if interface_mode: print("Calculator interface: %s" % interface_mode) print("Displacements were read from \"%s\"." % disp_filename) if disp_filename == 'disp.yaml': print('') print("NOTE:") print(" From phonopy v2.0, displacements are written into " "\"phonopy_disp.yaml\".") print(" \"disp.yaml\" is still supported for reading, but is " "deprecated.") print('') if force_sets_zero_mode: print("Forces in %s are subtracted from forces in all " "other files." % force_filenames[0]) if interface_mode in (None, 'vasp', 'abinit', 'elk', 'qe', 'siesta', 'cp2k', 'crystal', 'dftbp', 'turbomole'): disp_dataset = parse_disp_yaml(filename=disp_filename) num_atoms = disp_dataset['natom'] num_displacements = len(disp_dataset['first_atoms']) if force_sets_zero_mode: num_displacements += 1 force_sets = get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename=disp_filename, check_number_of_files=True, verbose=(log_level > 0)) elif interface_mode == 'wien2k': disp_dataset, supercell = parse_disp_yaml(filename=disp_filename, return_cell=True) from phonopy.interface.wien2k import parse_set_of_forces num_displacements = len(disp_dataset['first_atoms']) if force_sets_zero_mode: num_displacements += 1 if _check_number_of_files(num_displacements, force_filenames, disp_filename): force_sets = [] else: disps = [[d['number'], d['displacement']] for d in disp_dataset['first_atoms']] force_sets = parse_set_of_forces( disps, force_filenames, supercell, is_distribute=(not is_wien2k_p1), symmetry_tolerance=symmetry_tolerance, verbose=(log_level > 0)) else: force_sets = [] if force_sets: if force_sets_zero_mode: force_sets = _subtract_residual_forces(force_sets) for forces, disp in zip(force_sets, disp_dataset['first_atoms']): disp['forces'] = forces write_FORCE_SETS(disp_dataset, filename=force_sets_filename) if log_level > 0: if force_sets: print("%s has been created." % force_sets_filename) else: print("%s could not be created." % force_sets_filename) return 0
def create_FORCE_SETS(interface_mode, force_filenames, symprec=1e-5, is_wien2k_p1=False, force_sets_zero_mode=False, disp_filename='disp.yaml', force_sets_filename='FORCE_SETS', log_level=0): if (interface_mode is None or interface_mode == 'vasp' or interface_mode == 'abinit' or interface_mode == 'elk' or interface_mode == 'lmto' or interface_mode == 'qe' or interface_mode == 'siesta' or interface_mode == 'cp2k' or interface_mode == 'crystal'): disp_dataset = parse_disp_yaml(filename=disp_filename) num_atoms = disp_dataset['natom'] num_displacements = len(disp_dataset['first_atoms']) if force_sets_zero_mode: num_displacements += 1 force_sets = get_force_sets(interface_mode, num_atoms, num_displacements, force_filenames, disp_filename, verbose=(log_level > 0)) elif interface_mode == 'wien2k': disp_dataset, supercell = parse_disp_yaml(filename=disp_filename, return_cell=True) from phonopy.interface.wien2k import parse_set_of_forces num_displacements = len(disp_dataset['first_atoms']) if force_sets_zero_mode: num_displacements += 1 if _check_number_of_files(num_displacements, force_filenames, disp_filename): force_sets = [] else: disps = [[d['number'], d['displacement']] for d in disp_dataset['first_atoms']] force_sets = parse_set_of_forces( disps, force_filenames, supercell, is_distribute=(not is_wien2k_p1), symprec=symprec, verbose=(log_level > 0)) else: force_sets = [] if force_sets: if force_sets_zero_mode: force_sets = _subtract_residual_forces(force_sets) for forces, disp in zip(force_sets, disp_dataset['first_atoms']): disp['forces'] = forces write_FORCE_SETS(disp_dataset, filename=force_sets_filename) if log_level > 0: if force_sets: print("%s has been created." % force_sets_filename) else: print("%s could not be created." % force_sets_filename) return 0