示例#1
0
    def __init__(self, symbols=['Si'], a0=5.431, cell_type='cubic'):

        SimulationCell.__init__(self)

        cell_initializers = {}
        cell_initializers['cubic'] = self.initialize_cubic_cell
        cell_initializers['primitive'] = self.initialize_primitive_cell

        cell_initializers[cell_type](symbol=symbols[0], a0=a0)
示例#2
0
    def __init__(self, symbols=['Ni'], a=3.52):
        assert isinstance(symbols, list)
        assert len(symbols) == 1

        SimulationCell.__init__(self)
        self.H = np.array([[a, 0, 0], [0, a, 0], [0, 0, a]])

        self.add_atom(symbol=symbols[0], position=[0.0, 0.0, 0.0])
        self.add_atom(symbol=symbols[0], position=[0.5, 0.5, 0.5])
示例#3
0
    def __init__(self, symbols=['Pb'], a=5.8315, c=3.1814):
        assert isinstance(symbols, list)
        assert len(symbols) == 1
        SimulationCell.__init__(self)
        self.H = np.array([[a, 0, 0], [0, a, 0], [0, 0, c]])

        self.add_atom(symbol=symbols[0], position=[0., 0., 0.])
        self.add_atom(symbol=symbols[0], position=[0.5, 0.0, 0.75])
        self.add_atom(symbol=symbols[0], position=[0.5, 0.5, 0.5])
        self.add_atom(symbol=symbols[0], position=[0.0, 0.5, 0.25])
示例#4
0
def make_fcc_stacking_fault(symbols, stacking_sequence):
    # use ASE to make fcc 111 oriented cell
    direction_x = [1, 2, -1]
    direction_y = [1, -1, 0]
    direction_z = [1, 1, 0]

    ase_fcc_111 = FaceCenteredCubic(\
            directions=[direction_x,direction_y,direction_z],
            size=size,
            symbol=symbols[0],
            pbc=pbc)
    ase_lattice = ase_fcc_111.get_cell()

    for a in ase_fcc_111:
        for i in range(3):
            a.position[i] = round(a.position[i], 8)

    z_layers = []
    for a in ase_fcc_111:
        if a.position[2] not in z_layers:
            z_layers.append(a.position[2])

    n_layers = len([v for v in stacking_sequence if v is not ','])
    layer_spacing = ase_lattice[2, 2] / len(z_layers)

    simulation_cell = SimulationCell()
    simulation_cell.lattice_parameter = 1.0

    simulation_cell.H = copy.deepcopy(ase_lattice)
    simulation_cell.H[2, 2] = layer_spacing * n_layers
    n_layers = len([v for v in stacking_sequence if v is not ','])
    for n, c in enumerate([v for v in stacking_sequence if v != ',']):
        if c == 'A':
            layer = 'A'
            z_layer = z_layers[0]
        elif c == 'B':
            layer = 'B'
            z_layer = z_layers[1]
        elif c == 'C':
            layer = 'C'
            z_layer = z_layers[2]
        for a in ase_fcc_111:
            if a.position[2] == z_layer:
                s = a.symbol
                x = copy.deepcopy(a.position)
                x[0] = x[0] / simulation_cell.H[0, 0]
                x[1] = x[1] / simulation_cell.H[1, 1]
                x[2] = n * layer_spacing / simulation_cell.H[2, 2]
                simulation_cell.add_atom(s, x)
    return simulation_cell
示例#5
0
    _latticeconstant = {}
    _latticeconstant['a'] = 5.022  # Angs
    _latticeconstant['b'] = 5.022  # Angs
    _latticeconstant['c'] = 5.511  # Angs
    _latticeconstant['alpha'] = 90  #deg
    _latticeconstant['beta'] = 90  # degrees
    _latticeconstant['gamma'] = 120  # degrees

    # make ASE structure
    from ase import Atoms, Atom
    SiO2_aq = SiO2_a_quartz(directions=_directions,
                            size=(1, 1, 1),
                            symbol=('Si', 'O'),
                            latticeconstant=_latticeconstant)

    # convert to pypospack.crystal.SimulationCell
    from pypospack.crystal import SimulationCell
    SiO2_pyp = SimulationCell(SiO2_aq)

    # write the poscar file
    from pypospack.io.vasp import Poscar
    SiO2_poscar = Poscar(SiO2_pyp)
    SiO2_poscar.write('SiO2_aq_cubic.vasp')

    # write lammps structure
    from pypospack.io.lammps import LammpsStructure
    SiO2_lammps = LammpsStructure(SiO2_pyp)
    SiO2_lammps.write(filename='SiO2_aq_cubic.lammps',
                      symbol_list=['Si', 'O'],
                      atom_style='charge')  #or 'atomic'
示例#6
0
    if os.path.exists(dst_structure_dir):
        print('dst_structure_dir exists...')
        print(
            '...deleting directory and contents {}'.format(dst_structure_dir))
        print('...recreating the directory {}'.format(dst_structure_dir))
        shutil.rmtree(dst_structure_dir)
        os.mkdir(dst_structure_dir)
    else:
        print('dst_structure_dir does not exist...')
        print('...creating the directory {}'.format(dst_structure_dir))
        os.mkdir(dst_structure_dir)

    for k, v in structures.items():
        # convert ase -> pypospack
        v['pypospack_obj'] = SimulationCell(v['ase_obj'])
        # convert pypospack -> VASP poscar
        if is_write_vasp_structures:
            v['vasp_obj'] = Poscar(v['pypospack_obj'])
            v['vasp_fname'] = '{}.vasp'.format(k)
            v['vasp_obj'].write(
                os.path.join(dst_structure_dir, v['vasp_fname']))
            print('{}->{}'.format(k, v['vasp_fname']))

        # convert pypospack -> LAMMPS structure
        if is_write_lammps_structures:
            v['lammps_obj'] = LammpsStructure(v['pypospack_obj'])
            v['lammps_fname'] = '{}.structure'.format(k)
            v['lammps_obj'].write(filename=os.path.join(
                dst_structure_dir, v['lammps_fname']),
                                  symbol_list=v['symbol_list'],
示例#7
0
import os, shutil, subprocess
from pypospack.crystal import SimulationCell
import pypospack.io.vasp as vasp
import pypospack.crystal as crystal
import pypospack.io.slurm as minimize_init_slurm

# define simulation cell
cell = SimulationCell()
cell.a0 = 3.447
cell.add_atom('Fe', [0.0, 0.0, 0.0], magmom=3.00)
cell.add_atom('Fe', [0.5, 0.5, 0.0], magmom=3.00)
cell.add_atom('Fe', [0.5, 0.0, 0.5], magmom=-3.00)
cell.add_atom('Fe', [0.0, 0.5, 0.5], magmom=-3.00)

from pypospack.crystal import make_super_cell
poscar = vasp.Poscar(make_super_cell(structure=cell, sc=[3, 3, 3]))
poscar.add_atom('Fe', [1. / 6., 0.0, 0.0])
poscar.write("POSCAR")

s_out = ""
for atom in poscar.atomic_basis:
    s_out += "{:<4}{:10.6f}{:10.6f}{:10.6f}\n".format(atom.symbol,
                                                      atom.position[0],
                                                      atom.position[1],
                                                      atom.position[2])

with open('Fe_defect.gulp.structure', 'w') as f:
    f.write(s_out)
示例#8
0
import os, shutil, subprocess
from pypospack.crystal import SimulationCell
import pypospack.io.vasp as vasp
import pypospack.crystal as crystal
import pypospack.io.slurm as minimize_init_slurm

system_name = "Fe-fccD"
# define simulation cell
cell = SimulationCell()
cell.a0 = 3.447
cell.H = [[1, 0, 0], [0, 1, 0], [0, 0, 2]]
cell.add_atom('Fe', [0.0, 0.0, 0.00], magmom=2.22)
cell.add_atom('Fe', [0.5, 0.5, 0.00], magmom=2.22)
cell.add_atom('Fe', [0.5, 0.0, 0.25], magmom=2.22)
cell.add_atom('Fe', [0.0, 0.5, 0.25], magmom=2.22)
cell.add_atom('Fe', [0.0, 0.0, 0.50], magmom=-2.22)
cell.add_atom('Fe', [0.5, 0.5, 0.50], magmom=-2.22)
cell.add_atom('Fe', [0.5, 0.0, 0.75], magmom=-2.22)
cell.add_atom('Fe', [0.0, 0.5, 0.75], magmom=-2.22)

poscar = vasp.Poscar(cell)
poscar.write('Fe_fcc_afm_D.init.vasp')
print(poscar.get_magmom_tag())