Example #1
0
def write_FORCE_SETS_vasp(forces_filenames,
                          displacements,
                          filename='FORCE_SETS',
                          is_zero_point=False,
                          verbose=True):
    try:
        from lxml import etree
    except ImportError:
        print "You need to install python-lxml."
        sys.exit(1)

    if verbose:
        print "counter (file index):",
        
    num_atom = displacements['natom']
    count = 0
    are_files_correct = True
        
    if is_zero_point:
        force_files = forces_filenames[1:]
        if vasp.is_version528(forces_filenames[0]):
            zero_forces = vasp.get_forces_vasprun_xml(etree.iterparse(
                vasp.VasprunWrapper(forces_filenames[0]), tag='varray'))
        else:
            zero_forces = vasp.get_forces_vasprun_xml(
                etree.iterparse(forces_filenames[0], tag='varray'))

        if verbose:
            print "%d" % (count + 1),
        count += 1
            
        if not check_forces(zero_forces, num_atom, forces_filenames[0]):
            are_files_correct = False
    else:
        force_files = forces_filenames
        zero_forces = None

    for i, disp in enumerate(displacements['first_atoms']):
        if vasp.is_version528(force_files[i]):
            disp['forces'] = vasp.get_forces_vasprun_xml(etree.iterparse(
                vasp.VasprunWrapper(force_files[i]), tag='varray'))
        else:
            disp['forces'] = vasp.get_forces_vasprun_xml(
                etree.iterparse(force_files[i], tag='varray'))

        if verbose:
            print "%d" % (count + 1),
        count += 1
        
        if not check_forces(disp['forces'], num_atom, force_files[i]):
            are_files_correct = False

    if verbose:
        print
        
    write_FORCE_SETS(displacements,
                     filename=filename,
                     zero_forces=zero_forces)

    return are_files_correct
Example #2
0
def write_FORCES(lattice,
                 forces_filenames,
                 displacements,
                 filename='FORCE_SETS',
                 amplitude=0.01,
                 mode='vasp',
                 is_zero_point=False,
                 is_fropho_disp=False):

    if mode == "vasp":
        try:
            from lxml import etree
        except ImportError:
            print "You need to install python-lxml."
            sys.exit(1)

    if is_zero_point:
        force_files = forces_filenames[1:]
        if mode == "wien2k":
            zero_forces = wien2k.get_forces_wien2k(forces_filenames[0],
                                                   lattice)
        else:  # "vasp" case
            zero_forces = \
                vasp.get_forces_vasprun_xml(etree.iterparse(
                    vasp.VasprunWrapper(forces_filenames[0]),
                    tag='varray'))
    else:
        force_files = forces_filenames
        zero_forces = None

    displacements = sort_displacements(displacements)
    forces = []

    # Show progress
    print >> sys.stderr, "counter (file index):",
    for i in range(len(displacements)):
        if mode == "wien2k":  # wien2k
            forces.append(wien2k.get_forces_wien2k(force_files[i], lattice))
        else:  # vasp
            forces.append(
                vasp.get_forces_vasprun_xml(
                    etree.iterparse(vasp.VasprunWrapper(force_files[i]),
                                    tag='varray')))

    write_FORCES_from_forces(lattice,
                             forces,
                             displacements,
                             amplitude,
                             filename,
                             zero_forces,
                             is_fropho_disp,
                             verbose=True)

    # Show progress
    print >> sys.stderr, "\n"
Example #3
0
def write_FORCE_SETS_vasp(forces_filenames,
                          displacements,
                          filename='FORCE_SETS',
                          is_zero_point=False,
                          verbose=True):

    if verbose:
        print "counter (file index):",

    num_atom = displacements['natom']
    count = 0
    are_files_correct = True

    if is_zero_point:
        force_files = forces_filenames[1:]
        if vasp.is_version528(forces_filenames[0]):
            zero_forces = vasp.get_forces_vasprun_xml(
                iterparse(vasp.VasprunWrapper(forces_filenames[0]),
                          tag='varray'))
        else:
            zero_forces = vasp.get_forces_vasprun_xml(
                iterparse(forces_filenames[0], tag='varray'))

        if verbose:
            print "%d" % (count + 1),
        count += 1

        if not check_forces(zero_forces, num_atom, forces_filenames[0]):
            are_files_correct = False
    else:
        force_files = forces_filenames
        zero_forces = None

    for i, disp in enumerate(displacements['first_atoms']):
        if vasp.is_version528(force_files[i]):
            disp['forces'] = vasp.get_forces_vasprun_xml(
                iterparse(vasp.VasprunWrapper(force_files[i]), tag='varray'))
        else:
            disp['forces'] = vasp.get_forces_vasprun_xml(
                iterparse(force_files[i], tag='varray'))

        if verbose:
            print "%d" % (count + 1),
        count += 1

        if not check_forces(disp['forces'], num_atom, force_files[i]):
            are_files_correct = False

    if verbose:
        print

    write_FORCE_SETS(displacements, filename=filename, zero_forces=zero_forces)

    return are_files_correct
Example #4
0
def write_FORCES( lattice,
                  forces_filenames,
                  displacements,
                  filename='FORCE_SETS',
                  amplitude=0.01,
                  mode='vasp',
                  is_zero_point=False,
                  is_fropho_disp=False ):

    if mode == "vasp":
        try:
            from lxml import etree
        except ImportError:
            print "You need to install python-lxml."
            sys.exit(1)

    if is_zero_point:
        force_files = forces_filenames[1:]
        if mode == "wien2k":
            zero_forces = wien2k.get_forces_wien2k(forces_filenames[0], lattice)
        else: # "vasp" case
            zero_forces = \
                vasp.get_forces_vasprun_xml(etree.iterparse( 
                    vasp.VasprunWrapper( forces_filenames[0] ),
                    tag='varray' ) )
    else:
        force_files = forces_filenames
        zero_forces = None

    displacements = sort_displacements( displacements )
    forces = []

    # Show progress 
    print >> sys.stderr, "counter (file index):",
    for i in range( len( displacements ) ):
        if mode == "wien2k": # wien2k
            forces.append( wien2k.get_forces_wien2k( force_files[i], lattice ) )
        else: # vasp
            forces.append(
                vasp.get_forces_vasprun_xml( etree.iterparse(
                        vasp.VasprunWrapper( force_files[i] ),
                        tag='varray') ) )

    write_FORCES_from_forces( lattice,
                              forces,
                              displacements,
                              amplitude,
                              filename,
                              zero_forces,
                              is_fropho_disp,
                              verbose=True )

    # Show progress 
    print >> sys.stderr, "\n"
Example #5
0
def write_FORCE_SETS_vasp( forces_filenames,
                           displacements,
                           num_atom,
                           filename='FORCE_SETS',
                           is_zero_point=False,
                           verbose=True ):

    try:
        from lxml import etree
    except ImportError:
        print "You need to install python-lxml."
        sys.exit(1)

    if is_zero_point:
        force_files = forces_filenames[1:]
        zero_forces = vasp.get_forces_vasprun_xml(etree.iterparse(
                vasp.VasprunWrapper( forces_filenames[0] ),
                tag='varray' ) )
    else:
        force_files = forces_filenames
        zero_forces = None

    displacements = sort_displacements( displacements )
    forces = []

    # Show progress 
    for i in range( len( displacements ) ):
        forces.append( vasp.get_forces_vasprun_xml( etree.iterparse(
                    vasp.VasprunWrapper( force_files[i] ),
                    tag='varray') ) )

    if is_zero_point:
        dummy_forces = [ zero_forces ] + forces
    else:
        dummy_forces = forces
    if is_forces_read( dummy_forces, num_atom, forces_filenames ):
        if verbose:
            print >> sys.stderr, "counter (file index):",
        write_FORCE_SETS( filename,
                          num_atom,
                          displacements,
                          forces,
                          zero_forces,
                          verbose )
        return True
    else:
        return False
Example #6
0
def write_FORCE_SETS_vasp(forces_filenames,
                          displacements,
                          num_atom,
                          filename='FORCE_SETS',
                          is_zero_point=False,
                          verbose=True):

    try:
        from lxml import etree
    except ImportError:
        print "You need to install python-lxml."
        sys.exit(1)

    if is_zero_point:
        force_files = forces_filenames[1:]
        zero_forces = vasp.get_forces_vasprun_xml(
            etree.iterparse(vasp.VasprunWrapper(forces_filenames[0]),
                            tag='varray'))
    else:
        force_files = forces_filenames
        zero_forces = None

    forces = []

    # Show progress
    for i in range(len(displacements)):
        forces.append(
            vasp.get_forces_vasprun_xml(
                etree.iterparse(vasp.VasprunWrapper(force_files[i]),
                                tag='varray')))

    if is_zero_point:
        dummy_forces = [zero_forces] + forces
    else:
        dummy_forces = forces
    if is_forces_read(dummy_forces, num_atom, forces_filenames):
        if verbose:
            print >> sys.stderr, "counter (file index):",
        write_FORCE_SETS(filename, num_atom, displacements, forces,
                         zero_forces, verbose)
        return True
    else:
        return False