コード例 #1
0
ファイル: MP_lammps.py プロジェクト: santiama/MPInterfaces
 def write_lammps_data(self, f):
     """
     write lammps structure data
     from ase with custom modifications
     """
     f.write(f.name + ' (written by mpinterfaces) \n\n')
     symbols = self.atoms.get_chemical_symbols()
     n_atoms = len(symbols)
     f.write('%d \t atoms \n' % n_atoms)
     if self.specorder is None:
         species = [tos.symbol
                    for tos in self.structure.types_of_specie]
     else:
         species = self.specorder
     n_atom_types = len(species)
     f.write('%d  atom types\n' % n_atom_types)
     p = prism(self.atoms.get_cell())
     xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
     f.write('0.0 %s  xlo xhi\n' % xhi)
     f.write('0.0 %s  ylo yhi\n' % yhi)
     f.write('0.0 %s  zlo zhi\n' % zhi)
     if self.always_triclinic or p.is_skewed():
         f.write('%s %s %s  xy xz yz\n' % (xy, xz, yz))
     f.write('\n\n')
     f.write('Atoms \n\n')
     for i, r in enumerate(map(p.pos_to_lammps_str,
                               self.atoms.get_positions())):
         c = 0.0
         if self.charges:
             c = self.charges[symbols[i]]
         s = species.index(symbols[i]) + 1
         if 'atom_style' in self.parameters:
             if self.parameters['atom_style'] == 'charge':
                 
                 f.write('%6d %3d %6f %s %s %s\n' %
                         ((i+1, s, c)+tuple(r)) )
             else:
                 f.write('%6d %3d %s %s %s\n' % ((i+1, s)+tuple(r)))
     if self.atoms.get_velocities() is not None:
         f.write('\n\nVelocities \n\n')
         for i, v in enumerate(self.atoms.get_velocities()):
             f.write('%6d %s %s %s\n' % ((i+1,)+tuple(v)))
     f.close()
コード例 #2
0
ファイル: lammps.py プロジェクト: shzhangumd/MPInterfaces
 def write_lammps_data(self, f):
     """
     write lammps structure data
     from ase with custom modifications
     """
     f.write(f.name + ' (written by mpinterfaces) \n\n')
     symbols = self.atoms.get_chemical_symbols()
     n_atoms = len(symbols)
     f.write('%d \t atoms \n' % n_atoms)
     if self.specorder is None:
         species = [tos.symbol
                    for tos in self.structure.types_of_specie]
     else:
         species = self.specorder
     n_atom_types = len(species)
     f.write('%d  atom types\n' % n_atom_types)
     p = prism(self.atoms.get_cell())
     xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
     f.write('0.0 %s  xlo xhi\n' % xhi)
     f.write('0.0 %s  ylo yhi\n' % yhi)
     f.write('0.0 %s  zlo zhi\n' % zhi)
     if self.always_triclinic or p.is_skewed():
         f.write('%s %s %s  xy xz yz\n' % (xy, xz, yz))
     f.write('\n\n')
     f.write('Atoms \n\n')
     for i, r in enumerate(map(p.pos_to_lammps_str,
                               self.atoms.get_positions())):
         c = 0.0
         if self.charges:
             c = self.charges[symbols[i]]
         s = species.index(symbols[i]) + 1
         if 'atom_style' in self.parameters:
             if self.parameters['atom_style'] == 'charge':
                 
                 f.write('%6d %3d %6f %s %s %s\n' %
                         ((i+1, s, c)+tuple(r)) )
             else:
                 f.write('%6d %3d %s %s %s\n' % ((i+1, s)+tuple(r)))
     if self.atoms.get_velocities() is not None:
         f.write('\n\nVelocities \n\n')
         for i, v in enumerate(self.atoms.get_velocities()):
             f.write('%6d %s %s %s\n' % ((i+1,)+tuple(v)))
     f.close()
コード例 #3
0
def write_lammps_data(structure=None, file="", write_tmp_file=True):
    """
        write lammps structure data
        from ase with custom modifications

        Args:
            structure: Structure object
            file:  intended file to write in
        """
    structure.sort()
    if write_tmp_file == True:
        structure.to(fmt="poscar", filename="new_pymatgen_slab.vasp")
    atoms = AseAtomsAdaptor().get_atoms(structure)

    f = open(file, "w")
    f.write("datafile (written by JARVIS-FF) \n\n")
    symbols = atoms.get_chemical_symbols()
    import ase.io.vasp

    # ase.io.vasp.write_vasp("POSCAR.1x1x1",atoms, label='444supercell',direct=True,sort=False)
    n_atoms = len(symbols)
    f.write("%d \t atoms \n" % n_atoms)
    species = [tos for tos in Poscar(structure).site_symbols]
    # species = [tos.symbol
    #               for tos in structure.types_of_specie]
    n_atom_types = len(species)
    print("species", species)
    f.write("%d  atom types\n" % n_atom_types)
    p = prism(atoms.get_cell())
    xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
    f.write("0.0 %s  xlo xhi\n" % xhi)
    f.write("0.0 %s  ylo yhi\n" % yhi)
    f.write("0.0 %s  zlo zhi\n" % zhi)
    f.write("%s %s %s  xy xz yz\n" % (xy, xz, yz))
    f.write("\n\n")
    f.write("Atoms \n\n")
    for i, r in enumerate(map(p.pos_to_lammps_str, atoms.get_positions())):
        c = 0.0
        s = species.index(symbols[i]) + 1

        f.write("%6d %3d %6f %s %s %s\n" % ((i + 1, s, c) + tuple(r)))
    f.close()
コード例 #4
0
ファイル: opls.py プロジェクト: grhawk/ASE
    def write_lammps_atoms(self, atoms):
        """Write atoms infor for LAMMPS"""

        fileobj = self.prefix + '_atoms'
        if isinstance(fileobj, str):
            fileobj = open(fileobj, 'w')

        # header
        fileobj.write(fileobj.name + ' (by ' + str(self.__class__) + ')\n\n')
        fileobj.write(str(len(atoms)) + ' atoms\n')
        fileobj.write(str(len(atoms.types)) + ' atom types\n')
        btypes, blist = self.get_bonds(atoms)
        if len(blist):
            fileobj.write(str(len(blist)) + ' bonds\n')
            fileobj.write(str(len(btypes)) + ' bond types\n')
        atypes, alist = self.get_angles()
        if len(alist):
            fileobj.write(str(len(alist)) + ' angles\n')
            fileobj.write(str(len(atypes)) + ' angle types\n')
        dtypes, dlist = self.get_dihedrals(alist, atypes)
        if len(dlist):
            fileobj.write(str(len(dlist)) + ' dihedrals\n')
            fileobj.write(str(len(dtypes)) + ' dihedral types\n')

        # cell
        p = prism(atoms.get_cell())
        xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
        fileobj.write('\n0.0 %s  xlo xhi\n' % xhi)
        fileobj.write('0.0 %s  ylo yhi\n' % yhi)
        fileobj.write('0.0 %s  zlo zhi\n' % zhi)

        # atoms
        fileobj.write('\nAtoms\n\n')
        tag = atoms.get_tags()
        for i, r in enumerate(map(p.pos_to_lammps_str, atoms.get_positions())):
            q = 0  # charge will be overwritten
            fileobj.write('%6d %3d %3d %s %s %s %s' %
                          ((i + 1, 1, tag[i] + 1, q) + tuple(r)))
            fileobj.write(' # ' + atoms.types[tag[i]] + '\n')

        # velocities
        velocities = atoms.get_velocities()
        if velocities is not None:
            fileobj.write('\nVelocities\n\n')
            for i, v in enumerate(velocities):
                fileobj.write('%6d %g %g %g\n' % (i + 1, v[0], v[1], v[2]))

        # masses
        fileobj.write('\nMasses\n\n')
        for i, typ in enumerate(atoms.types):
            cs = atoms.split_symbol(typ)[0]
            fileobj.write(
                '%6d %g # %s -> %s\n' %
                (i + 1, atomic_masses[chemical_symbols.index(cs)], typ, cs))

        # bonds
        if len(blist):
            fileobj.write('\nBonds\n\n')
            for ib, bvals in enumerate(blist):
                fileobj.write(
                    '%8d %6d %6d %6d ' %
                    (ib + 1, bvals[0] + 1, bvals[1] + 1, bvals[2] + 1))
                fileobj.write('# ' + btypes[bvals[0]] + '\n')

        # angles
        if len(alist):
            fileobj.write('\nAngles\n\n')
            for ia, avals in enumerate(alist):
                fileobj.write('%8d %6d %6d %6d %6d ' %
                              (ia + 1, avals[0] + 1, avals[1] + 1,
                               avals[2] + 1, avals[3] + 1))
                fileobj.write('# ' + atypes[avals[0]] + '\n')

        # dihedrals
        if len(dlist):
            fileobj.write('\nDihedrals\n\n')
            for i, dvals in enumerate(dlist):
                fileobj.write('%8d %6d %6d %6d %6d %6d ' %
                              (i + 1, dvals[0] + 1, dvals[1] + 1, dvals[2] + 1,
                               dvals[3] + 1, dvals[4] + 1))
                fileobj.write('# ' + dtypes[dvals[0]] + '\n')

        return btypes, atypes, dtypes
コード例 #5
0
ファイル: opls.py プロジェクト: engelund/SIESTA_ASE
    def write_lammps_atoms(self, atoms, connectivities):
        """Write atoms input for LAMMPS"""
        
        fname = self.prefix + '_atoms'
        fileobj = open(fname, 'w')

        # header
        fileobj.write(fileobj.name + ' (by ' + str(self.__class__) + ')\n\n')
        fileobj.write(str(len(atoms)) + ' atoms\n')
        fileobj.write(str(len(atoms.types)) + ' atom types\n')
        blist = connectivities['bonds']
        if len(blist):
            btypes = connectivities['bond types']
            fileobj.write(str(len(blist)) + ' bonds\n')
            fileobj.write(str(len(btypes)) + ' bond types\n')
        alist = connectivities['angles']
        if len(alist):
            atypes = connectivities['angle types']
            fileobj.write(str(len(alist)) + ' angles\n')
            fileobj.write(str(len(atypes)) + ' angle types\n')
        dlist = connectivities['dihedrals']
        if len(dlist):
            dtypes = connectivities['dihedral types']
            fileobj.write(str(len(dlist)) + ' dihedrals\n')
            fileobj.write(str(len(dtypes)) + ' dihedral types\n')

        # cell
        p = prism(atoms.get_cell())
        xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
        fileobj.write('\n0.0 %s  xlo xhi\n' % xhi)
        fileobj.write('0.0 %s  ylo yhi\n' % yhi)
        fileobj.write('0.0 %s  zlo zhi\n' % zhi)
        
        # atoms
        fileobj.write('\nAtoms\n\n')
        tag = atoms.get_tags()
        if atoms.has('molid'):
            molid = atoms.get_array('molid')
        else:
            molid = [1] * len(atoms)
        for i, r in enumerate(map(p.pos_to_lammps_str,
                                  atoms.get_positions())):
            q = self.data['one'][atoms.types[tag[i]]][2]
            fileobj.write('%6d %3d %3d %s %s %s %s' % ((i + 1, molid[i],
                                                        tag[i] + 1,
                                                        q)
                                                       + tuple(r)))
            fileobj.write(' # ' + atoms.types[tag[i]] + '\n')

        # velocities
        velocities = atoms.get_velocities()
        if velocities is not None:
            fileobj.write('\nVelocities\n\n')
            for i, v in enumerate(velocities):
                fileobj.write('%6d %g %g %g\n' %
                              (i + 1, v[0], v[1], v[2]))

        # masses
        fileobj.write('\nMasses\n\n')
        for i, typ in enumerate(atoms.types):
            cs = atoms.split_symbol(typ)[0]
            fileobj.write('%6d %g # %s -> %s\n' %
                          (i + 1,
                           atomic_masses[chemical_symbols.index(cs)],
                           typ, cs))
  
        # bonds
        if len(blist):
            fileobj.write('\nBonds\n\n')
            for ib, bvals in enumerate(blist):
                fileobj.write('%8d %6d %6d %6d ' %
                              (ib + 1, bvals[0] + 1, bvals[1] + 1,
                               bvals[2] + 1))
                try:
                    fileobj.write('# ' + btypes[bvals[0]])
                except:
                    pass
                fileobj.write('\n')

        # angles
        if len(alist):
            fileobj.write('\nAngles\n\n')
            for ia, avals in enumerate(alist):
                fileobj.write('%8d %6d %6d %6d %6d ' %
                              (ia + 1, avals[0] + 1,
                               avals[1] + 1, avals[2] + 1, avals[3] + 1))
                try:
                    fileobj.write('# ' + atypes[avals[0]])
                except:
                    pass
                fileobj.write('\n')

        # dihedrals
        if len(dlist):
            fileobj.write('\nDihedrals\n\n')
            for i, dvals in enumerate(dlist):
                fileobj.write('%8d %6d %6d %6d %6d %6d ' %
                              (i + 1, dvals[0] + 1,
                               dvals[1] + 1, dvals[2] + 1,
                               dvals[3] + 1, dvals[4] + 1))
                try:
                    fileobj.write('# ' + dtypes[dvals[0]])
                except:
                    pass
                fileobj.write('\n')
コード例 #6
0
ファイル: opls.py プロジェクト: grhawk/ASE
    def write_lammps_atoms(self, atoms):
        """Write atoms infor for LAMMPS"""
        
        fileobj = self.prefix + '_atoms'
        if isinstance(fileobj, str):
            fileobj = open(fileobj, 'w')

        # header
        fileobj.write(fileobj.name + ' (by ' + str(self.__class__) + ')\n\n')
        fileobj.write(str(len(atoms)) + ' atoms\n')
        fileobj.write(str(len(atoms.types)) + ' atom types\n')
        btypes, blist = self.get_bonds(atoms)
        if len(blist):
            fileobj.write(str(len(blist)) + ' bonds\n')
            fileobj.write(str(len(btypes)) + ' bond types\n')
        atypes, alist = self.get_angles()
        if len(alist):
            fileobj.write(str(len(alist)) + ' angles\n')
            fileobj.write(str(len(atypes)) + ' angle types\n')
        dtypes, dlist = self.get_dihedrals(alist, atypes)
        if len(dlist):
            fileobj.write(str(len(dlist)) + ' dihedrals\n')
            fileobj.write(str(len(dtypes)) + ' dihedral types\n')

        # cell
        p = prism(atoms.get_cell())
        xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
        fileobj.write('\n0.0 %s  xlo xhi\n' % xhi)
        fileobj.write('0.0 %s  ylo yhi\n' % yhi)
        fileobj.write('0.0 %s  zlo zhi\n' % zhi)
        
        # atoms
        fileobj.write('\nAtoms\n\n')
        tag = atoms.get_tags()
        for i, r in enumerate(map(p.pos_to_lammps_str,
                                  atoms.get_positions())):
            q = 0  # charge will be overwritten
            fileobj.write('%6d %3d %3d %s %s %s %s' % ((i + 1, 1,
                                                        tag[i] + 1, 
                                                        q)
                                                       + tuple(r)))
            fileobj.write(' # ' + atoms.types[tag[i]] + '\n')

        # velocities
        velocities = atoms.get_velocities()
        if velocities is not None:
            fileobj.write('\nVelocities\n\n')
            for i, v in enumerate(velocities):
                fileobj.write('%6d %g %g %g\n' %
                              (i + 1, v[0], v[1], v[2]))

        # masses
        fileobj.write('\nMasses\n\n')
        for i, typ in enumerate(atoms.types):
            cs = atoms.split_symbol(typ)[0]
            fileobj.write('%6d %g # %s -> %s\n' % 
                          (i + 1, 
                           atomic_masses[chemical_symbols.index(cs)],
                           typ, cs))
  
        # bonds
        if len(blist):
            fileobj.write('\nBonds\n\n')
            for ib, bvals in enumerate(blist):
                fileobj.write('%8d %6d %6d %6d ' %
                              (ib + 1, bvals[0] + 1, bvals[1] + 1, 
                               bvals[2] + 1))
                fileobj.write('# ' + btypes[bvals[0]] + '\n')

        # angles
        if len(alist):
            fileobj.write('\nAngles\n\n')
            for ia, avals in enumerate(alist):
                fileobj.write('%8d %6d %6d %6d %6d ' %
                              (ia + 1, avals[0] + 1, 
                               avals[1] + 1, avals[2] + 1, avals[3] + 1))
                fileobj.write('# ' + atypes[avals[0]] + '\n')

        # dihedrals
        if len(dlist):
            fileobj.write('\nDihedrals\n\n')
            for i, dvals in enumerate(dlist):
                fileobj.write('%8d %6d %6d %6d %6d %6d ' %
                              (i + 1, dvals[0] + 1, 
                               dvals[1] + 1, dvals[2] + 1, 
                               dvals[3] + 1, dvals[4] + 1))
                fileobj.write('# ' + dtypes[dvals[0]] + '\n')

        return btypes, atypes, dtypes
コード例 #7
0
    def write_lammps_atoms(self, atoms, connectivities):
        """Write atoms input for LAMMPS"""

        fname = self.prefix + '_atoms'
        fileobj = open(fname, 'w')

        # header
        fileobj.write(fileobj.name + ' (by ' + str(self.__class__) + ')\n\n')
        fileobj.write(str(len(atoms)) + ' atoms\n')
        fileobj.write(str(len(atoms.types)) + ' atom types\n')
        blist = connectivities['bonds']
        if len(blist):
            btypes = connectivities['bond types']
            fileobj.write(str(len(blist)) + ' bonds\n')
            fileobj.write(str(len(btypes)) + ' bond types\n')
        alist = connectivities['angles']
        if len(alist):
            atypes = connectivities['angle types']
            fileobj.write(str(len(alist)) + ' angles\n')
            fileobj.write(str(len(atypes)) + ' angle types\n')
        dlist = connectivities['dihedrals']
        if len(dlist):
            dtypes = connectivities['dihedral types']
            fileobj.write(str(len(dlist)) + ' dihedrals\n')
            fileobj.write(str(len(dtypes)) + ' dihedral types\n')

        # cell
        p = prism(atoms.get_cell())
        xhi, yhi, zhi, xy, xz, yz = p.get_lammps_prism_str()
        fileobj.write('\n0.0 %s  xlo xhi\n' % xhi)
        fileobj.write('0.0 %s  ylo yhi\n' % yhi)
        fileobj.write('0.0 %s  zlo zhi\n' % zhi)

        # atoms
        fileobj.write('\nAtoms\n\n')
        tag = atoms.get_tags()
        if atoms.has('molid'):
            molid = atoms.get_array('molid')
        else:
            molid = [1] * len(atoms)
        for i, r in enumerate(map(p.pos_to_lammps_str, atoms.get_positions())):
            q = self.data['one'][atoms.types[tag[i]]][2]
            fileobj.write('%6d %3d %3d %s %s %s %s' %
                          ((i + 1, molid[i], tag[i] + 1, q) + tuple(r)))
            fileobj.write(' # ' + atoms.types[tag[i]] + '\n')

        # velocities
        velocities = atoms.get_velocities()
        if velocities is not None:
            fileobj.write('\nVelocities\n\n')
            for i, v in enumerate(velocities):
                fileobj.write('%6d %g %g %g\n' % (i + 1, v[0], v[1], v[2]))

        # masses
        fileobj.write('\nMasses\n\n')
        for i, typ in enumerate(atoms.types):
            cs = atoms.split_symbol(typ)[0]
            fileobj.write(
                '%6d %g # %s -> %s\n' %
                (i + 1, atomic_masses[chemical_symbols.index(cs)], typ, cs))

        # bonds
        if len(blist):
            fileobj.write('\nBonds\n\n')
            for ib, bvals in enumerate(blist):
                fileobj.write(
                    '%8d %6d %6d %6d ' %
                    (ib + 1, bvals[0] + 1, bvals[1] + 1, bvals[2] + 1))
                try:
                    fileobj.write('# ' + btypes[bvals[0]])
                except:
                    pass
                fileobj.write('\n')

        # angles
        if len(alist):
            fileobj.write('\nAngles\n\n')
            for ia, avals in enumerate(alist):
                fileobj.write('%8d %6d %6d %6d %6d ' %
                              (ia + 1, avals[0] + 1, avals[1] + 1,
                               avals[2] + 1, avals[3] + 1))
                try:
                    fileobj.write('# ' + atypes[avals[0]])
                except:
                    pass
                fileobj.write('\n')

        # dihedrals
        if len(dlist):
            fileobj.write('\nDihedrals\n\n')
            for i, dvals in enumerate(dlist):
                fileobj.write('%8d %6d %6d %6d %6d %6d ' %
                              (i + 1, dvals[0] + 1, dvals[1] + 1, dvals[2] + 1,
                               dvals[3] + 1, dvals[4] + 1))
                try:
                    fileobj.write('# ' + dtypes[dvals[0]])
                except:
                    pass
                fileobj.write('\n')