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)
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])
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])
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
_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'
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'],
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)
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())