from asap3 import * from asap3.constraints import FixAtoms from ase.lattice.cubic import FaceCenteredCubic from ase.io import read, write from asap3.io.trajectory import PickleTrajectory fn = "testconstraint.traj" atoms = FaceCenteredCubic(symbol='Cu', size=(3,3,3)) c = FixAtoms(indices=(2,3)) atoms.set_constraint(c) write(fn, atoms) atoms2 = read(fn) c2 = atoms2.constraints[0] print "Original class:", c.__class__ print "New class:", c2.__class__ assert c.__class__ is c2.__class__ print "Test passed."
#view the slab to make sure it is how you expect view(slab) #some positions needed to place the atom in the correct place x1 = 1.379 x2 = 4.137 x3 = 2.759 y1 = 0.0 y2 = 2.238 z1 = 7.165 z2 = 6.439 #Add the adatom to the list of atoms and set constraints of surface atoms. slab += Atoms('N', [((x2 + x1) / 2, y1, z1 + 1.5)]) mask = [atom.symbol == 'Pt' for atom in slab] slab.set_constraint(FixAtoms(mask=mask)) #optimise the initial state # Atom below step initial = slab.copy() initial.set_calculator(EMT()) relax = QuasiNewton(initial) relax.run(fmax=0.05) view(initial) #optimise the initial state # Atom above step slab[-1].position = (x3, y2 + 1, z2 + 3.5) final = slab.copy() final.set_calculator(EMT()) relax = QuasiNewton(final)
view(slab) #some positions needed to place the atom in the correct place x1 = 1.379 x2 = 4.137 x3 = 2.759 y1 = 0.0 y2 = 2.238 z1 = 7.165 z2 = 6.439 #Add the adatom to the list of atoms and set constraints of surface atoms. slab += Atoms('N', [ ((x2+x1)/2,y1,z1+1.5)]) mask = [atom.symbol == 'Pt' for atom in slab] slab.set_constraint(FixAtoms(mask=mask)) #optimise the initial state # Atom below step initial = slab.copy() initial.set_calculator(EMT()) relax = QuasiNewton(initial) relax.run(fmax=0.05) view(initial) #optimise the initial state # Atom above step slab[-1].position = (x3,y2+1,z2+3.5) final = slab.copy() final.set_calculator(EMT()) relax = QuasiNewton(final)