Esempio n. 1
0
def get_force_sets(interface_mode,
                   num_atoms,
                   num_displacements,
                   force_filenames,
                   disp_filename=None,
                   verbose=True):
    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
    elif interface_mode == 'aims':
        from phonopy.interface.aims import parse_set_of_forces
    else:
        return []

    force_sets = parse_set_of_forces(num_atoms,
                                     force_filenames,
                                     verbose=verbose)

    return force_sets
def write_force_constants_to_file_path(initial_structure, phonopy_inputs,
                                       vasp_xml_file_paths_list, file_path):
    """
	Writes the phonopy-calculated force constants to file_path
	"""

    phonon = get_initialized_phononopy_instance(initial_structure,
                                                phonopy_inputs)

    sets_of_forces = parse_set_of_forces(
        num_atoms=get_supercell_atom_count(initial_structure, phonopy_inputs),
        forces_filenames=vasp_xml_file_paths_list)

    phonon.produce_force_constants(sets_of_forces)

    write_FORCE_CONSTANTS(phonon.get_force_constants(), filename=file_path)
Esempio n. 3
0
def get_force_sets_wien2k(num_displacements,
                          force_filenames,
                          disp_filename,
                          supercell,
                          disp_dataset,
                          wien2k_P1_mode=False,
                          symmetry_tolerance=None,
                          verbose=False):
    from phonopy.interface.wien2k import parse_set_of_forces
    disps, _ = get_displacements_and_forces(disp_dataset)
    force_sets = parse_set_of_forces(disps,
                                     force_filenames,
                                     supercell,
                                     wien2k_P1_mode=wien2k_P1_mode,
                                     symmetry_tolerance=symmetry_tolerance,
                                     verbose=verbose)
    return force_sets
Esempio n. 4
0
def get_force_sets(
    interface_mode,
    num_atoms,
    force_filenames,
    verbose=True,
):
    """Read calculator output files and parse force sets.

    Note
    ----
    Wien2k output is treated by ``get_force_sets_wien2k``.

    """
    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
    elif interface_mode == "aims":
        from phonopy.interface.aims import parse_set_of_forces
    elif interface_mode == "castep":
        from phonopy.interface.castep import parse_set_of_forces
    elif interface_mode == "fleur":
        from phonopy.interface.fleur import parse_set_of_forces

    else:
        return []

    force_sets = parse_set_of_forces(num_atoms, force_filenames, verbose=verbose)

    return force_sets
Esempio n. 5
0
def get_force_sets_wien2k(
    force_filenames,
    supercell,
    disp_dataset,
    wien2k_P1_mode=False,
    symmetry_tolerance=None,
    verbose=False,
):
    """Read Wien2k output files and parse force sets."""
    from phonopy.interface.wien2k import parse_set_of_forces

    disps, _ = get_displacements_and_forces(disp_dataset)
    force_sets = parse_set_of_forces(
        disps,
        force_filenames,
        supercell,
        wien2k_P1_mode=wien2k_P1_mode,
        symmetry_tolerance=symmetry_tolerance,
        verbose=verbose,
    )
    return force_sets
Esempio n. 6
0
def create_FORCE_SETS(interface_mode, force_filenames, options, log_level):
    if interface_mode == "vasp":
        displacements = parse_disp_yaml(filename="disp.yaml")
    if (
        interface_mode == "wien2k"
        or interface_mode == "abinit"
        or interface_mode == "elk"
        or interface_mode == "pwscf"
        or interface_mode == "siesta"
    ):
        displacements, supercell = parse_disp_yaml(filename="disp.yaml", return_cell=True)

    num_disp_files = len(force_filenames)
    if options.force_sets_zero_mode:
        num_disp_files -= 1
    if len(displacements["first_atoms"]) != num_disp_files:
        print("")
        print("Number of files to be read don't match " "to number of displacements in disp.yaml.")
        return 1

    if interface_mode == "vasp":
        from phonopy.interface.vasp import parse_set_of_forces

        is_parsed = parse_set_of_forces(displacements, force_filenames, is_zero_point=options.force_sets_zero_mode)

    if interface_mode == "abinit":
        from phonopy.interface.abinit import parse_set_of_forces

        print("**********************************************************")
        print("****    Abinit FORCE_SETS support is experimental.    ****")
        print("****        Your feedback would be appreciated.       ****")
        print("**********************************************************")
        is_parsed = parse_set_of_forces(displacements, force_filenames, supercell.get_number_of_atoms())

    if interface_mode == "pwscf":
        from phonopy.interface.pwscf import parse_set_of_forces

        print("**********************************************************")
        print("****     Pwscf FORCE_SETS support is experimental.    ****")
        print("****        Your feedback would be appreciated.       ****")
        print("**********************************************************")
        is_parsed = parse_set_of_forces(displacements, force_filenames, supercell.get_number_of_atoms())

    if interface_mode == "wien2k":
        from phonopy.interface.wien2k import parse_set_of_forces

        print("**********************************************************")
        print("****    Wien2k FORCE_SETS support is experimental.    ****")
        print("****        Your feedback would be appreciated.       ****")
        print("**********************************************************")
        is_parsed = parse_set_of_forces(
            displacements, force_filenames, supercell, is_distribute=(not options.is_wien2k_p1), symprec=options.symprec
        )

    if interface_mode == "elk":
        from phonopy.interface.elk import parse_set_of_forces

        print("**********************************************************")
        print("****      Elk FORCE_SETS support is experimental.     ****")
        print("****        Your feedback would be appreciated.       ****")
        print("**********************************************************")
        is_parsed = parse_set_of_forces(displacements, force_filenames, supercell.get_number_of_atoms())

    if interface_mode == "siesta":
        from phonopy.interface.siesta import parse_set_of_forces

        print("**********************************************************")
        print("****   Siesta FORCE_SETS support is experimental.     ****")
        print("****        Your feedback would be appreciated.       ****")
        print("**********************************************************")
        is_parsed = parse_set_of_forces(displacements, force_filenames, supercell.get_number_of_atoms())

    if is_parsed:
        write_FORCE_SETS(displacements, filename="FORCE_SETS")

    if log_level > 0:
        if is_parsed:
            print("FORCE_SETS has been created.")
        else:
            print("FORCE_SETS could not be created.")

    return 0
Esempio n. 7
0
def create_FORCE_SETS(interface_mode, force_filenames, options, log_level):
    if interface_mode == 'vasp':
        displacements = parse_disp_yaml(filename='disp.yaml')
    if (interface_mode == 'wien2k' or interface_mode == 'abinit'
            or interface_mode == 'pwscf'):
        displacements, supercell = parse_disp_yaml(filename='disp.yaml',
                                                   return_cell=True)

    num_disp_files = len(force_filenames)
    if options.force_sets_zero_mode:
        num_disp_files -= 1
    if len(displacements['first_atoms']) != num_disp_files:
        print
        print(
            "Number of files to be read don't match "
            "to number of displacements in disp.yaml.")
        return 1

    if interface_mode == 'vasp':
        from phonopy.interface.vasp import parse_set_of_forces
        is_parsed = parse_set_of_forces(
            displacements,
            force_filenames,
            is_zero_point=options.force_sets_zero_mode)

    if interface_mode == 'abinit':
        from phonopy.interface.abinit import parse_set_of_forces
        print "**********************************************************"
        print "****    Abinit FORCE_SETS support is experimental.    ****"
        print "****        Your feedback would be appreciated.       ****"
        print "**********************************************************"
        is_parsed = parse_set_of_forces(displacements, force_filenames,
                                        supercell.get_number_of_atoms())

    if interface_mode == 'pwscf':
        from phonopy.interface.pwscf import parse_set_of_forces
        print "**********************************************************"
        print "****     Pwscf FORCE_SETS support is experimental.    ****"
        print "****        Your feedback would be appreciated.       ****"
        print "**********************************************************"
        is_parsed = parse_set_of_forces(displacements, force_filenames,
                                        supercell.get_number_of_atoms())

    if interface_mode == 'wien2k':
        from phonopy.interface.wien2k import parse_set_of_forces
        print "**********************************************************"
        print "****    Wien2k FORCE_SETS support is experimental.    ****"
        print "****        Your feedback would be appreciated.       ****"
        print "**********************************************************"
        is_parsed = parse_set_of_forces(
            displacements,
            force_filenames,
            supercell,
            is_distribute=(not options.is_wien2k_p1),
            symprec=options.symprec)

    if is_parsed:
        write_FORCE_SETS(displacements, filename='FORCE_SETS')

    if log_level > 0:
        if is_parsed:
            print "FORCE_SETS has been created."
        else:
            print "FORCE_SETS could not be created."

    return 0
Esempio n. 8
0
def create_FORCE_SETS(interface_mode,
                      force_filenames,
                      options,
                      log_level):
    if interface_mode == 'vasp':
        displacements = parse_disp_yaml(filename='disp.yaml')
    if (interface_mode == 'wien2k' or
        interface_mode == 'abinit' or
        interface_mode == 'pwscf'):
        displacements, supercell = parse_disp_yaml(filename='disp.yaml',
                                                   return_cell=True)
            
    num_disp_files = len(force_filenames)
    if options.force_sets_zero_mode:
        num_disp_files -= 1
    if len(displacements['first_atoms']) != num_disp_files:
        print
        print ("Number of files to be read don't match "
               "to number of displacements in disp.yaml.")
        return 1

    if interface_mode == 'vasp':
        from phonopy.interface.vasp import parse_set_of_forces
        is_parsed = parse_set_of_forces(
            displacements,
            force_filenames,
            is_zero_point=options.force_sets_zero_mode)

    if interface_mode == 'abinit':
        from phonopy.interface.abinit import parse_set_of_forces
        print "**********************************************************"
        print "****    Abinit FORCE_SETS support is experimental.    ****"
        print "****        Your feedback would be appreciated.       ****"
        print "**********************************************************"
        is_parsed = parse_set_of_forces(
            displacements,
            force_filenames,
            supercell.get_number_of_atoms())
        
    if interface_mode == 'pwscf':
        from phonopy.interface.pwscf import parse_set_of_forces
        print "**********************************************************"
        print "****     Pwscf FORCE_SETS support is experimental.    ****"
        print "****        Your feedback would be appreciated.       ****"
        print "**********************************************************"
        is_parsed = parse_set_of_forces(
            displacements,
            force_filenames,
            supercell.get_number_of_atoms())
        
    if interface_mode == 'wien2k':
        from phonopy.interface.wien2k import parse_set_of_forces
        print "**********************************************************"
        print "****    Wien2k FORCE_SETS support is experimental.    ****"
        print "****        Your feedback would be appreciated.       ****"
        print "**********************************************************"
        is_parsed = parse_set_of_forces(
            displacements,
            force_filenames,
            supercell,
            is_distribute=(not options.is_wien2k_p1),
            symprec=options.symprec)

    if is_parsed:
        write_FORCE_SETS(displacements,
                         filename='FORCE_SETS')
        
    if log_level > 0:
        if is_parsed:
            print "FORCE_SETS has been created."
        else:
            print "FORCE_SETS could not be created."

    return 0