コード例 #1
0
ファイル: __init__.py プロジェクト: PaulChern/PWmat2Phonopy
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
コード例 #2
0
ファイル: __init__.py プロジェクト: PaulChern/PWmat2Phonopy
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
コード例 #3
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 == '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
コード例 #4
0
ファイル: __init__.py プロジェクト: chueter/phonopy
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
コード例 #5
0
ファイル: __init__.py プロジェクト: hoang6/phonopy
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
コード例 #6
0
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
コード例 #7
0
ファイル: __init__.py プロジェクト: chueter/phonopy
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
コード例 #8
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
コード例 #9
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
コード例 #10
0
ファイル: calculator.py プロジェクト: xue-smile/phonopy
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
コード例 #11
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
コード例 #12
0
ファイル: __init__.py プロジェクト: gcgs1/phonopy
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